Почему этот модульный тест Microsoft не проходит? - PullRequest
1 голос
/ 21 февраля 2011

У меня есть модульный тест, и число, которое сохраняется в фактической переменной при расчете расстояния, равно 6.07328028312884, но оно все еще говорит, что тест не пройден. Почему?

        double expected = 6.07328028312884; 
        double actual;
        actual = target.Distance((double)latitude, (double)longitude);
        actual = actual / 1000;

        Assert.AreEqual(expected, actual);

Ответы [ 3 ]

5 голосов
/ 21 февраля 2011

Как сказал Мэтт, сравнивать равенство двух чисел не очень хорошая идея, используйте Math.Abs(expected-actual)<epsilon с небольшим эпсилоном.

5 голосов
/ 21 февраля 2011

числа с плавающей запятой неточны по своей конструкции.Проверка такой точности, вероятно, не сработает.Какое значение actual?Вы, вероятно, обнаружите, что это немного неожиданно, из-за округления и общего характера чисел с плавающей запятой на компьютерах.

0 голосов
/ 21 февраля 2011

Я не уверен насчет Microsoft UT, но в CPPUNIT есть специальный макрос

CPPUNIT_ASSERT_DOUBLES_EQUAL (ожидаемый, фактический)

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

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