Visual Studio Unit Test: почему тестовый запуск неубедительный, тогда как при тестировании одинаковых значений float?

Я изучаю VS Unit test и пробовал это:

    [TestMethod()]
    public void calcTest()
    {
        double expected = 1.234F; // TODO: Initialize to an appropriate value
        double actual;
        actual = 1.234F;
        Assert.AreEqual(expected, actual);
        Assert.Inconclusive("Verify the correctness of this test method.");
    }

При запуске этого метода тестирования он говорит об ошибке? Почему?

Обновление: Привет, ребята, чтобы сказать, не сравнивайте поплавки, но требования к бизнесу - это то, что они есть, и что мне делать, если мне нужно их сравнить?

Вы имеете в виду, что невозможно проверить плавающие вычисления без головной боли? Тогда, если тестирование является такой головной болью в финансовых расчетах, не лучше ли вообще вообще не тестировать?

Похоже на огромную ошибку или недостаток дизайна в vs test framework, а именно:), как сказано здесь http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.assert.inconclusive%28VS.80%29.aspx

Указывает, что утверждение не может быть доказано true или false.

Так как я сравниваю 2 одинаковых словаря, это верно!

Ответ 1

erm, потому что вы сказали это?

Assert.Inconclusive("Verify the correctness of this test method.");

Теперь у вас есть AreEqual, вы можете удалить этот Inconclusive

Любая сбой во время теста (не включая исключения, которые вы намеренно обрабатываете), как правило, является терминалом, но любое утверждение, которое проходит (например, AreEqual здесь), просто продолжает работать. Итак, первый тест проходит, тогда последняя строка помещает его как неубедительную.

Ответ 2

Даже если вы удалили Assert.Inconclusive, у вас все еще могут быть проблемы.

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

Math.Abs(actual - expected) < 0.00001;

например.

Ваш Assert.AreEqual(expected, actual); работает в этом случае, потому что вы назначаете одно и то же значение для обеих переменных.

Ответ 3

Не означает ли это только то, что прошло AreEqual, что означало, что он называется Assert.Inconclusive, что приводит к результату неубедительного?

От документы:

Аналогично Fail, поскольку он указывает утверждение неубедительно без проверяя любые условия.

Если вы не хотите, чтобы результат был включен, удалите вызов Assert.Inconclusive:)

Ответ 4

Автоматический UnitTest генерируется VS и говорит вам создать некоторые операции для сравнения. если вы прокомментируете последнюю команду Assert, вы получите "Passed" с зеленой меткой, но вы ее не протестировали.
Вам нужно, как в комментарии, "Инициализировать до соответствующего значения" и как в последнем утверждении "Проверить правильность этого метода тестирования".
Инициализировать ожидаемые и фактические значения, из которых они исходят например, Ожидаемое - это ожидаемое значение из функции Add (x, y), где x = 2 и y = 3. Фактическое значение должно исходить от функции. в этом случае:

// Sample - Start
Expected = 2+3;
Actual = Add(2,3);
Assert.AreEqual(expected, actual);
// Sample - End

Надеюсь, что это помогло, я сломал несколько зубов для этого...; -)