我为ExpectedExceptionBaseAttribute:
创建了单元测试的自定义属性public class ExpectedEngineExceptionAttribute : ExpectedExceptionBaseAttribute
我覆盖了验证方法,如下所示:
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,但是期望引擎异常。异常消息:System.Exception:SS
在输出窗口中显示“Hola”异常消息时,我错过了什么?
我反编译了ExpectedExceptionAttribute,并在我的自定义属性中执行了它的操作,但是它没有工作......
更新:添加断点确认抛出异常(“Hola !!”):
答案 0 :(得分:1)
RethrowIfAssertException在
时抛出异常"如果它是AssertFailedException或者AssertInconclusiveException,那么再次引发异常"
所以,如果这是一个例外,它将永远不会到达你的" Hola"例外抛出。
答案 1 :(得分:0)
它在VS 2013 Update 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!!!");
}
}