Модульный тест Visual Studio: почему тестирование не дает результатов, а тестирование одинаковых значений с плавающей запятой? - PullRequest
10 голосов
/ 23 сентября 2010

Я изучаю 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

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

Поскольку я сравниваю 2 одинаковых литерала, я уверен, что это правда!

Ответы [ 4 ]

17 голосов
/ 23 сентября 2010

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

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

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

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

8 голосов
/ 23 сентября 2010

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

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

Math.Abs(actual - expected) < 0.00001;

.

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

2 голосов
/ 16 октября 2012

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

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

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

2 голосов
/ 23 сентября 2010

Разве это не означает, что AreEqual прошло, что означало, что он назвал Assert.Inconclusive, что привело к неокончательному результату?

С Документы :

Похож на Fail в том смысле, что утверждение неубедительно без проверка любых условий.

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

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