Dependency Inversion Principle Refactorings Dependency Injection
We are refactoring Dependency Inversion Principle Demo.
public interface IFiscalRegistrator
{
decimal GetSalesSum();
decimal GetSumOfReturnedTickets();
}
public class FiscalRegistrator : IFiscalRegistrator
{
public decimal GetSalesSum()
{
return 0;
}
public decimal GetSumOfReturnedTickets()
{
return 0;
}
}
public interface IAccounter
{
decimal GetSalesSum();
decimal GetSumOfReturnedTickets();
}
public class Accounter : IAccounter
{
public decimal GetSalesSum()
{
return 0;
}
public decimal GetSumOfReturnedTickets()
{
return 0;
}
}
public class GainDivergenceChecker
{
// public IAccounter Accounter { get; set; }
// public IFiscalRegistrator Fr { get; set; }
private IAccounter _privateAccounter;
private IFiscalRegistrator _fr;
public GainDivergenceChecker(IAccounter accounter, IFiscalRegistrator fr)
{
_privateAccounter = accounter;
_fr = fr;
}
// public bool HasDivergence(IAccounter accounter, IFiscalRegistrator fr)
public bool HasDivergence ()
{
return accounter.GetSalesSum() == fr.GetSalesSum() &&
accounter.GetSumOfReturnedTickets() == fr.GetSumOfReturnedTickets();
}
...
}
Now we can write a test.
using NUnit.Frakework;
using NUnit.Framework.Internal;
namespace SOLID.UnitTests
{
[TestFixture]
public class GainDivergenceCheckerTests
{
[Test]
[TestCase(100, 100, 100, 100, true)]
[TestCase(100, 200, 100, 200, true)]
[TestCase(50, 100, 50, 100, true)]
[TestCase(50, 100, 50, 50, false)]
[TestCase(100, 100, 50, 50, false)]
public void HasDivergence_ReturnsCorrectResult(
decimal accounterSales, decimal accounterReturned,
decimal frSales, decimal frReturned, bool expectResult
)
{
IAccounter accounter = new TestableAccounter()
{
SalesSum = accounterSales,
SumOfReturnedTickets = accounterReturned,
};
IFiscalRegistrator fr = new TestableFr()
{
SalesSum = frSales,
SumOfReturnedTickets = frReturned,
};
var checker = new GainDivergenceChecker(accounter, fr);
bool result = checker.HasDivergence();
Assert.AreEqual(expectResult, result);
}
}
public class TestableFr : IFiscalRegistrator
{
public decimal SalesSum { get; set; }
public decimal SumOfReturnedTickets { get; set; }
public decimal GetSalesSum()
{
return SalesSum;
}
public decimal GetSumOfReturnedTickets()
{
return SumOfReturnedTickets;
}
}
public class TestableAccounter : IAccounter
{
public decimal SalesSum { get; set; }
public decimal SumOfReturnedTickets { get; set; }
public decimal GetSalesSum()
{
return SalesSum;
}
public decimal GetSumOfReturnedTickets()
{
return SumOfReturnedTickets;
}
}
}