代码之家  ›  专栏  ›  技术社区  ›  Shaddix

NUnit次线程异常

  •  4
  • Shaddix  · 技术社区  · 14 年前

    我已经准备好了测试,我在NUnit看到的是:

    LegacyImportWrapperTests.Import_ExceptionInImport_Ok : PassedSystem.ArgumentException: aaaaaaaaaa
    at Import.Legacy.Tests.Stub.ImportStub.Import() in ImportStub.cs: line 51...
    

    1 回复  |  直到 14 年前
        1
  •  5
  •   Fredrik Mörk    14 年前

    我用过 AppDomain.UnhandledException 在测试期间监视这样的场景的事件(假设异常未处理,我假设这里就是这种情况):

    bool exceptionWasThrown = false;
    UnhandledExceptionEventHandler unhandledExceptionHandler = (s, e) =>
    {
        if (!exceptionWasThrown)
        {
            exceptionWasThrown = true;
        }
    };
    
    AppDomain.CurrentDomain.UnhandledException += unhandledExceptionHandler;
    
    // perform the test here, using whatever synchronization mechanisms needed
    // to wait for threads to finish
    
    // ...and detach the event handler
    AppDomain.CurrentDomain.UnhandledException -= unhandledExceptionHandler;
    
    // make assertions
    Assert.IsFalse(exceptionWasThrown, "There was at least one unhandled exception");
    

    如果只想测试特定的异常,可以在事件处理程序中执行该操作:

    UnhandledExceptionEventHandler unhandledExceptionHandler = (s, e) =>
    {
        if (!exceptionWasThrown)
        {
            exceptionWasThrown = e.ExceptionObject.GetType() == 
                                     typeof(PassedSystem.ArgumentException);
        }
    };