Тестирование на C# - почему метод ExpectedException проходит, когда исключение не выдается?
В прошлом я проверял на ожидаемые исключения, как это:
[TestMethod]
public void TestThrowsException() {
try {
Foo();
Assert.Fail();
} catch (MyException ex){//good
}
}
Однако я заметил, что есть (более чистый?) Способ проверить это с помощью атрибута ExpectedException. Почему этот метод теста проходит, когда исключение не выдается? Конечно, это побеждает цель атрибута.
[TestMethod]
[ExpectedException(typeof(MyException))]
public void TestThrowsException() {
}
[Редактировать] Я запускаю этот тест с использованием Silverlight 2
4 ответа
Я никогда не видел этот проход - это действительно все, что у тебя есть? Вы абсолютно уверены, что отметили его как TestMethod
? Тестовый бегун показывает это прохождение? Вы определенно получили самый последний код?
Я дважды проверю, но я уверен, что не получится...
Джон Скит был на самом деле прав, у меня была старая версия инфраструктуры тестирования. Я обновился до выпуска 8 декабря здесь http://code.msdn.microsoft.com/silverlightut/Release/ProjectReleases.aspx?ReleaseId=1913 и получил ожидаемое поведение при добавлении тегов ExpectedException.
Я на самом деле испытал, что ReSharper 4.5 testrunner не работает с ExpectedException в NUnit 2.5. ... но это похоже на MSTest ... вы можете уточнить, какую платформу тестов вы используете и какой тестовый прогон вы используете для выполнения тестов?
Вы должны использовать "ExpectedException" с дополнительным assert.fail, чтобы тест не удался, если исключение не выдается (все еще в VS 2010 с.net 4 и Microsoft.VisualStudio.QualityTools.UnitTestFramework):
[TestMethod]
[ExpectedException(typeof(MyException))]
public void TestThrowsException() {
Do.SomethingThatThrowsAnException();
assert.fail("No exception ;-(");
}