MSTest [TestMethod] завершается ошибкой, даже когда код для тестирования перехватывает, и не перебрасывает исключение? - PullRequest
0 голосов
/ 16 марта 2012

Я использую MSTest и в [TestMethod] у меня есть объект, код которого выдает исключение, и я его ловлю; при определенных обстоятельствах я перебрасываю его, а иногда нет, но тест всегда завершается неудачей, указывая на то, что было сгенерировано исключение, даже если я не перебрасываю его несколько раз. Как мне условно игнорировать исключение? Поскольку это условно, независимо от того, перезапускаю ли я исключение, я не могу использовать [ExpectedException].

1 Ответ

0 голосов
/ 16 марта 2012

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

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

Например:

[TestMethod]
public void SomeMethodDoesntFail()
{
    var obj = new objectUnderTest();
    var shouldThrow = false;
    var result = obj.SomeMethod(shouldThrow);
    Assert.IsEqual(*expected result*, result);
}

[TestMethod, ExpectedException]
public void SomeMethodFails()
{
    var obj = new objectUnderTest();
    var shouldThrow = true;
    var result = obj.SomeMethod(shouldThrow);
}
...