Тестирование C # - почему метод с тегом ExpectedException проходит, когда исключение не выдается? - PullRequest
1 голос
/ 11 мая 2009

В прошлом я проверял на ожидаемые исключения, подобные этому:

[TestMethod]
public void TestThrowsException() {
  try {
    Foo();
    Assert.Fail();
  } catch (MyException ex){//good
  }
}

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

[TestMethod]
[ExpectedException(typeof(MyException))]
public void TestThrowsException() {
}

[Редактировать] Я запускаю этот тест с использованием Silverlight 2

Ответы [ 4 ]

4 голосов
/ 11 мая 2009

Я никогда не видел этот проход - действительно ли это ? Вы абсолютно уверены, что пометили как TestMethod? Тестовый бегун показывает это прохождение? Вы определенно получили самый последний код?

Я дважды проверю, но я уверен, что это не удастся ...

1 голос
/ 14 мая 2009

Джон Скит был на самом деле прав, у меня была старая версия инфраструктуры тестирования. Я обновился до выпуска 8 декабря здесь http://code.msdn.microsoft.com/silverlightut/Release/ProjectReleases.aspx?ReleaseId=1913 и получил ожидаемое поведение при пометке ExpectedException.

0 голосов
/ 19 мая 2011

Вы должны использовать «ExpectedException» с дополнительным assert.fail, чтобы тест не прошел, если исключение не выдается (все еще в VS 2010 с .net 4 и Microsoft.VisualStudio.QualityTools.UnitTestFramework):

[TestMethod]
[ExpectedException(typeof(MyException))]
public void TestThrowsException() {

    Do.SomethingThatThrowsAnException();
    assert.fail("No exception ;-(");

}
0 голосов
/ 11 мая 2009

Я на самом деле испытал, что ReSharper 4.5 testrunner не работает с ExpectedException в NUnit 2.5. ... но это похоже на MSTest ... вы можете уточнить, какую платформу тестов вы используете и какой тестовый прогон вы используете для выполнения тестов?

...