使用 NUnit 对未处理的异常处理程序进行单元测试

发布于 2024-10-17 07:06:21 字数 771 浏览 7 评论 0 原文

我有一个单元测试故意生成未处理的异常。我已经使用以下方法连接了未处理异常的处理程序(我想测试它):

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梅窗月明清似水 2024-10-24 07:06:21

您不是在测试处理程序,而是测试处理程序应执行操作的条件。考虑将异常处理程序提取到它自己的类中,例如:

    internal class AnExceptionHandler
    {
        public static void UnhandledHandler(object sender, UnhandledExceptionEventArgs args)
        {
            //Do your thing and test this. 
        }
    }

实例化此类,并将事件连接到此类。

希望这有帮助。

问候,
莫滕

You are not testing the handler, but the condition in which the handler should act. Concider extracting the Exceptionhandler into its own class like:

    internal class AnExceptionHandler
    {
        public static void UnhandledHandler(object sender, UnhandledExceptionEventArgs args)
        {
            //Do your thing and test this. 
        }
    }

Instantiate this class, and hook up the event up to this.

Hope this helps.

Regards,
Morten

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文