我有MS测试单元测试,确保在测试中的方法被赋予错误参数时抛出Exception
。我正在使用这种模式:
My actual;
bool threw = false;
try
{
actual = target.DoSomething(aBadParameter);
}
catch
{
threw = true;
}
Assert.IsTrue(threw);
我将CLR异常设置为仅在用户未处理时(不是在抛出时)中断。但是,当DoSomething()
抛出new Exception()
时,调试器会中断。如果我恢复,单元测试成功完成。
如果我将单元测试代码剪切并粘贴到主程序中并在主程序的上下文中运行(而不是在MS Test下),则调试器不会因用户处理的异常而中断。
如何防止调试器破坏用户处理的异常?
这不会出现在与
相关的表面上Getting an Unhandled Exception in VS2010 debugger even though the exception IS handled
因为在这种情况下,异常被抛出在另一个线程上,并且被回调内的CLR重新抛出。
答案 0 :(得分:2)
在MSTest中测试抛出异常的惯用方法是使用ExpectedException
属性:
[TestMethod]
[ExpectedException(typeof(FooException))]
public void ThrowsFooExceptionWithBadInput()
{
var actual = target.DoSomething(aBadParameter);
}