使用 NUnit 对未处理的异常处理程序进行单元测试
我有一个单元测试故意生成未处理的异常。我已经使用以下方法连接了未处理异常的处理程序(我想测试它):
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
我的测试如下:
LogClient client = new LogClient(); // The handler is wired up in here
Trace.TraceInformation( "About to cause an unhandled divide-by-zero exception." );
for ( int i = 10; i > -10; --i )
{
int j = 100 / i;
Console.WriteLine( "i={0}, j={1}", i, j );
}
Assert.NotNull( client.UnhandledException );
当然,异常被抛出,NUnit 捕获它并导致测试失败。我尝试添加
[ExpectedException(typeof(DivideByZeroException))]
并且测试“通过”,但我的处理程序从未被调用,并且 Assert.NotNull
从未被执行。我想知道是否可以为未处理的异常处理程序编写单元测试。任何指示表示赞赏。
我正在使用 NUnit 2.5.7 和 VS 2010。
I have a unit test that deliberately generates an unhandled exception. I've wired up a handler for unhandled exceptions (which I'd like to test) using:
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
My test is as follows:
LogClient client = new LogClient(); // The handler is wired up in here
Trace.TraceInformation( "About to cause an unhandled divide-by-zero exception." );
for ( int i = 10; i > -10; --i )
{
int j = 100 / i;
Console.WriteLine( "i={0}, j={1}", i, j );
}
Assert.NotNull( client.UnhandledException );
Of course, the exception is thrown and NUnit catches it and fails the test. I've tried adding the
[ExpectedException(typeof(DivideByZeroException))]
and the test "passes" but my handler is never called and the Assert.NotNull
is never executed. I'm wondering if it is possible to write a unit test for an unhandled exception handler. Any pointers appreciated.
I'm using NUnit 2.5.7 w/ VS 2010.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不是在测试处理程序,而是测试处理程序应执行操作的条件。考虑将异常处理程序提取到它自己的类中,例如:
实例化此类,并将事件连接到此类。
希望这有帮助。
问候,
莫滕
You are not testing the handler, but the condition in which the handler should act. Concider extracting the Exceptionhandler into its own class like:
Instantiate this class, and hook up the event up to this.
Hope this helps.
Regards,
Morten