12,750,710 members (37,177 online)

#### Stats

75.5K views
116 bookmarked
Posted 20 Nov 2006

# Who cares about Domain Rules?

, 20 Nov 2006 MIT
With this article, I am evolving a domain problem towards the best possible solution.
 BusinessRules 0 - Procedural_Way 0 - Procedural_Way.smp ProceduralWay.cd Tests 1 - Evolution One 1 - Evolution One.smp EvolutionOne.cd Tests 2 - Evolution Two 2 - Evolution Two.smp EvolutionTwo.cd Tests 3 - Evolution Three 3 - Evolution Three.smp EvolutionThree.cd IncomeTaxEngine.cd Tests 4 - Evolution Four 4 - Evolution Four.smp EvolutionFour.cd Tests 5 - Evolution Five 5 - Evolution Five.smp EvolutionFive.cd TaxBandGenerator.cd Tests bin Debug BusinessRules.dll BusinessRules.dll.lastcodeanalysissucceeded NMock2.dll BusinessRules.csproj.user obj Debug BusinessRules.dll TempPE Properties Tools NMock2.dll nunit.framework.dll ```using NUnit.Framework; namespace BusinessRules.Evolution_One.Tests { [TestFixture] public class InvestorFixture { [Test] public void TaxRateCalculatedCorrectlyForUS() { // Create the instance of the investor IInvestor investor = new UsaInvestor(0.0); // Validate the calculations works as expected Assert.AreEqual(0.10, investor.TaxRate); investor.Income = 1500.00; Assert.AreEqual(0.10, investor.TaxRate); investor.Income = 7550.99; Assert.AreEqual(0.10, investor.TaxRate); investor.Income = 7551.00; Assert.AreEqual(0.15, investor.TaxRate); investor.Income = 28000.00; Assert.AreEqual(0.15, investor.TaxRate); investor.Income = 30650.99; Assert.AreEqual(0.15, investor.TaxRate); investor.Income = 30651.00; Assert.AreEqual(0.25, investor.TaxRate); investor.Income = 65000.00; Assert.AreEqual(0.25, investor.TaxRate); investor.Income = 74200.99; Assert.AreEqual(0.25, investor.TaxRate); investor.Income = 74201.00; Assert.AreEqual(0.28, investor.TaxRate); investor.Income = 84526.00; Assert.AreEqual(0.28, investor.TaxRate); investor.Income = 154800.99; Assert.AreEqual(0.28, investor.TaxRate); investor.Income = 154801.00; Assert.AreEqual(0.33, investor.TaxRate); investor.Income = 205456.44; Assert.AreEqual(0.33, investor.TaxRate); investor.Income = 336550.99; Assert.AreEqual(0.33, investor.TaxRate); investor.Income = 336551.00; Assert.AreEqual(0.35, investor.TaxRate); investor.Income = 536551.00; Assert.AreEqual(0.35, investor.TaxRate); investor.Income = double.MaxValue - 0.01; Assert.AreEqual(0.35, investor.TaxRate); } [Test] public void TaxLiabilityCalculatedCorrectlyForUS() { // Create the instance of the investor IInvestor investor = new UsaInvestor(0.0); // Validate the calculations works as expected Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 1500.00; Assert.AreEqual(150.00, investor.TaxLiability, 2.0); investor.Income = 7550.99; Assert.AreEqual(755.10, investor.TaxLiability, 2.0); investor.Income = 7551.00; Assert.AreEqual(755.10, investor.TaxLiability, 2.0); investor.Income = 28000.00; Assert.AreEqual(3822.45, investor.TaxLiability, 2.0); investor.Income = 30650.99; Assert.AreEqual(4220.10, investor.TaxLiability, 2.0); investor.Income = 30651.00; Assert.AreEqual(4220.10, investor.TaxLiability, 2.0); investor.Income = 65000.00; Assert.AreEqual(12807.35, investor.TaxLiability, 2.0); investor.Income = 74200.99; Assert.AreEqual(15107.60, investor.TaxLiability, 2.0); investor.Income = 74201.00; Assert.AreEqual(15107.60, investor.TaxLiability, 2.0); investor.Income = 84526.00; Assert.AreEqual(17998.60, investor.TaxLiability, 2.0); investor.Income = 154800.99; Assert.AreEqual(37675.60, investor.TaxLiability, 2.0); investor.Income = 154801.00; Assert.AreEqual(37675.60, investor.TaxLiability, 2.0); investor.Income = 205456.44; Assert.AreEqual(54391.89, investor.TaxLiability, 2.0); investor.Income = 336550.99; Assert.AreEqual(97653.09, investor.TaxLiability, 2.0); investor.Income = 336551.00; Assert.AreEqual(97653.09, investor.TaxLiability, 2.0); investor.Income = 536551.00; Assert.AreEqual(167653.09, investor.TaxLiability, 2.0); investor.Income = double.MaxValue - 0.01; Assert.AreEqual(6.2919259720181043E+307, investor.TaxLiability, 2.0); } [Test] public void TaxRateCalculatedCorrectlyForAustralia() { // Create the instance of the investor IInvestor investor = new AustralianInvestor(0.0); // Validate the calculations works as expected Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 1500.00; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 6000.99; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 6001.00; Assert.AreEqual(0.15, investor.TaxRate); investor.Income = 22258.32; Assert.AreEqual(0.15, investor.TaxRate); investor.Income = 25000.99; Assert.AreEqual(0.15, investor.TaxRate); investor.Income = 25001.00; Assert.AreEqual(0.30, investor.TaxRate); investor.Income = 65000.00; Assert.AreEqual(0.30, investor.TaxRate); investor.Income = 75000.99; Assert.AreEqual(0.30, investor.TaxRate); investor.Income = 75001.00; Assert.AreEqual(0.40, investor.TaxRate); investor.Income = 84526.00; Assert.AreEqual(0.40, investor.TaxRate); investor.Income = 150000.99; Assert.AreEqual(0.40, investor.TaxRate); investor.Income = 150001.00; Assert.AreEqual(0.45, investor.TaxRate); investor.Income = 205456.44; Assert.AreEqual(0.45, investor.TaxRate); investor.Income = double.MaxValue - 0.01; Assert.AreEqual(0.45, investor.TaxRate); } [Test] public void TaxLiabilityCalculatedCorrectlyForAustralia() { // Create the instance of the investor IInvestor investor = new AustralianInvestor(0.0); // Validate the calculations works as expected Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 1500.00; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 6000.99; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 6001.00; Assert.AreEqual(0.15, investor.TaxLiability, 2.0); investor.Income = 22258.32; Assert.AreEqual(2438.60, investor.TaxLiability, 2.0); investor.Income = 25000.99; Assert.AreEqual(2850.00, investor.TaxLiability, 2.0); investor.Income = 25001.00; Assert.AreEqual(2850.00, investor.TaxLiability, 2.0); investor.Income = 65000.00; Assert.AreEqual(14849.70, investor.TaxLiability, 2.0); investor.Income = 75000.99; Assert.AreEqual(17850.00, investor.TaxLiability, 2.0); investor.Income = 75001.00; Assert.AreEqual(17850.00, investor.TaxLiability, 2.0); investor.Income = 84526.00; Assert.AreEqual(21660.00, investor.TaxLiability, 2.0); investor.Income = 150000.99; Assert.AreEqual(47850.00, investor.TaxLiability, 2.0); investor.Income = 150001.00; Assert.AreEqual(47850.00, investor.TaxLiability, 2.0); investor.Income = 205456.44; Assert.AreEqual(72804.94, investor.TaxLiability, 2.0); investor.Income = double.MaxValue - 0.01; Assert.AreEqual(8.0896191068804208E+307, investor.TaxLiability, 2.0); } [Test] public void TaxRateCalculatedCorrectlyForNewZealand() { // Create the instance of the investor IInvestor investor = new NewZealandInvestor(0.0); // Validate the calculations works as expected Assert.AreEqual(0.195, investor.TaxRate); investor.Income = 9500.00; Assert.AreEqual(0.195, investor.TaxRate); investor.Income = 19500.00; Assert.AreEqual(0.195, investor.TaxRate); investor.Income = 19500.99; Assert.AreEqual(0.195, investor.TaxRate); investor.Income = 19501.00; Assert.AreEqual(0.33, investor.TaxRate); investor.Income = 28000.00; Assert.AreEqual(0.33, investor.TaxRate); investor.Income = 60000.00; Assert.AreEqual(0.33, investor.TaxRate); investor.Income = 60000.99; Assert.AreEqual(0.33, investor.TaxRate); investor.Income = 60001.00; Assert.AreEqual(0.39, investor.TaxRate); investor.Income = 65000.00; Assert.AreEqual(0.39, investor.TaxRate); investor.Income = 999999999.00; Assert.AreEqual(0.39, investor.TaxRate); } [Test] public void TaxLiabilityCalculatedCorrectlyForNewZealand() { // Create the instance of the investor IInvestor investor = new NewZealandInvestor(0.0); // Validate the calculations works as expected Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 9500.00; Assert.AreEqual(1852.50, investor.TaxLiability, 2.0); investor.Income = 19500.00; Assert.AreEqual(3802.50, investor.TaxLiability, 2.0); investor.Income = 19500.99; Assert.AreEqual(3802.69, investor.TaxLiability, 2.0); investor.Income = 19501.00; Assert.AreEqual(3802.70, investor.TaxLiability, 2.0); investor.Income = 28000.00; Assert.AreEqual(6607.36, investor.TaxLiability, 2.0); investor.Income = 60000.00; Assert.AreEqual(17167.36, investor.TaxLiability, 2.0); investor.Income = 60000.99; Assert.AreEqual(17167.69, investor.TaxLiability, 2.0); investor.Income = 60001.00; Assert.AreEqual(17167.69, investor.TaxLiability, 2.0); investor.Income = 65000.00; Assert.AreEqual(19117.30, investor.TaxLiability, 2.0); investor.Income = 999999999.00; Assert.AreEqual(389993766.91, investor.TaxLiability, 2.0); investor.Income = double.MaxValue - 0.01; Assert.AreEqual(7.0110032259630313E+307, investor.TaxLiability, 2.0); } [Test] public void TaxRateCalculatedCorrectlyForNonExceptionalBehavior() { // Create the instance of the investor for Non-Exceptional behavior IInvestor investor = new NullInvestor(); // Validate the calculations works as expected Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 9500.00; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 19500.00; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 19500.99; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 19501.00; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 28000.00; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 60000.00; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 60000.99; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 60001.00; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 65000.00; Assert.AreEqual(0.0, investor.TaxRate); investor.Income = 999999999.00; Assert.AreEqual(0.0, investor.TaxRate); } [Test] public void TaxLiabilityCalculatedCorrectlyForNonExceptionalBehavior() { // Create the instance of the investor for Non-Exceptional behavior IInvestor investor = new NullInvestor(); // Validate the calculations works as expected Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 9500.00; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 19500.00; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 19500.99; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 19501.00; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 28000.00; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 60000.00; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 60000.99; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 60001.00; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 65000.00; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = 999999999.00; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); investor.Income = double.MaxValue - 0.01; Assert.AreEqual(0.0, investor.TaxLiability, 2.0); } } }```

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.