Модульный тест VS2010 не пройден, а результат верен - PullRequest
1 голос
/ 20 июля 2011

Я сделал демонстрационный проект по тестированию с VS2010 в компании, в которой я работаю. В качестве входных данных для тестов немного математического расчета класса: MathOps. MathOps может выдавать некоторые исключения и еще много чего. Однако, когда я настраивал модульные тесты, я наткнулся на модульный тест, который, кажется, ведет себя очень странно.

Объект MathOps называется target и инициализируется в методе инициализации теста, чтобы продемонстрировать, для чего он может быть использован.

Private target As MathOps = Nothing

<TestInitialize()> _
Public Sub MyTestInitialize()
    target = New MathOps()
End Sub

Тест, который плохо себя ведет, следующий:

'''<summary>
'''A test for MathOps.add
'''</summary>
<TestMethod()> _
Public Sub addTest()
    Dim first As Double = 2.3
    Dim second As Double = 3.4
    Dim expected As Double = 5.7
    Dim actual As Double
    actual = target.add(first, second)
    Assert.AreEqual(expected, actual)
End Sub

Когда я использую термины сложения, в результате чего значение 5.7 является ожидаемым / результатом, утверждение не выполняется, даже если код дает правильный результат.

Assert.AreEqual не удалось. Ожидаемое: <5,7>. Фактический:. <5,7>

Если я сделаю 5.7000001, добавив 3.4000001 вместо 3.4, тест пройден.

Кто-нибудь знает причину этой ошибки?

1 Ответ

2 голосов
/ 20 июля 2011

Никогда не ожидайте точных результатов от операций с плавающей запятой; Арифметика с плавающей точкой по своей природе подвержена проблемам округления, подобным этой .Вместо этого проверьте результат, используя порог ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...