У меня есть следующий код в 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
Я поместил вышеупомянутые сценарии в некоторые модульные тесты, используя c # и используя инфраструктуру тестирования 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