У меня есть следующий код в vb.net, который вычисляет сумму до применения налога:
Public Shared Function CalculateRateBeforeTax(ByVal rate As Decimal, ByVal tax As Decimal) As Decimal
Dim base As Decimal = rate / (1 + (tax / 100.0))
Return Math.Round(base,2)
End Function
Вот некоторые сценарии, которые я настроил:
Ставка = 107, Налог = 7%, База = 100
Ставка = 325, налог = 6,5%, база = 305,16.
Ставка = 215, Налог = 125%, База = 95,55
Я поместил приведенные выше сценарии в некоторые модульные тесты, используя С# и среду тестирования nunit. Первый сценарий проходит, но другой терпит неудачу, и я не уверен, как я могу его пройти. Вот мои тесты:
[TestFixture]
class TaxTests
{
[Test]
public void CalculateRateBeforeTax_ShouldReturn100_WhenRateIs107AndTaxIs7Percent()
{
decimal expected = 100.0m;
decimal actual = TaxUtil.CalculateRateBeforeTax(107.0m, 7.0m);
Assert.AreEqual(expected,actual);
}
[Test]
public void CalculateRateBeforeTax_ShouldReturn305point16_WhenRateIs325AndTaxIs6point5Percent()
{
decimal expected = 305.16m;
decimal actual = TaxUtil.CalculateRateBeforeTax(325.0m, 6.5m);
Assert.AreEqual(expected, actual);
}
[Test]
public void CalculateRateBeforeTax_ShouldReturn95point55_WhenRateIs215AndTaxIs125Percent()
{
decimal expected = 95.55m;
decimal actual = TaxUtil.CalculateRateBeforeTax(215.0m, 125.0m);
Assert.AreEqual(expected, actual);
}
}
Как я уже говорил, первый тест проходит, но результаты других тестов таковы:
Второй тест ожидался 305.1600000000000003d Но был: 305.1643192488263d
Третий тест ожидался 95,54999999999997 Но был: 95,55555555555555557d