Я создал настраиваемый атрибут для модульного тестирования на основе ExpectedExceptionBaseAttribute:
public class ExpectedEngineExceptionAttribute : ExpectedExceptionBaseAttribute
Я переопределяю метод Verify следующим образом:
protected override void Verify(Exception exception)
{
RethrowIfAssertException(exception);
throw new Exception("Hola!!");
}
Здесь TestMethod (он вызывает метод, который бросает a):
[TestMethod]
[ExpectedEngineExceptionAttribute()]
public void MyTest()
{
SomeCode();
}
Вывод в окне тестирования устройства показывает:
Exception has been thrown by the target of an invocation.
Я бы хотел увидеть сообщение Hola !!
Когда я запускаю следующий метод тестирования:
[TestMethod]
[ExpectedException(typeof(EngineException))]
public void MyTest2()
{
SomeCode();
}
Выход:
Метод тестирования NotificationInputAttributeInvalidTypeTest вызвал исключение System.Exception, но ожидалось исключение EngineException. Сообщение об исключении: System.Exception: SS
Что мне не хватает, чтобы в окне вывода появилось мое сообщение об исключении "Hola"?
Я декомпилировал ExpectedExceptionAttribute и сделал то, что он делает в моем настраиваемом атрибуте, но он не работает...
UPDATE: добавление точки останова подтверждает исключение ("Hola !!"):
Исключение RethrowIfAssertException вызывает исключение, когда
"Выдает исключение снова, если это AssertFailedException или AssertInconclusiveException"
поэтому, если это выбрасывает исключение, он никогда не попадет в ваш бросок исключений "Hola".
он отлично работает в VS 2013 Обновление 2:
Код:
[TestClass]
public class MyTests
{
[TestMethod]
[ExpectedEngineExceptionAttribute]
public void MyTest()
{
throw new Exception("HI");
}
}
public class ExpectedEngineExceptionAttribute : ExpectedExceptionBaseAttribute
{
protected override void Verify(Exception exception)
{
RethrowIfAssertException(exception);
throw new Exception("Hola!!!");
}
}