gpt4 book ai didi

c# - AppDomain.UnhandledException 处理程序不会在单元测试中触发

转载 作者:太空狗 更新时间:2023-10-30 00:43:57 33 4
gpt4 key购买 nike

在下面的代码片段中,为什么在单元测试中抛出异常时附加的处理程序(AppDomain.CurrentDomain.UnhandledException 事件)不会启动?

我在 VS2010 上使用 NUnit 2.5.10 和 TestDriven.NET 3.0。

[TestFixture]
public class MyTests {

private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
Console.WriteLine("Gotcha!");
}

[Test]
public void ExceptionTest1() {
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
throw new Exception("ExceptionInTest");
}

}

输出:(没有陷阱)

------ Test started: Assembly: WcfQueue.Test.dll ------

Test 'xxxxx.Test.MyTests.ExceptionTest1' failed: System.Exception : ExceptionInTest
ProgramTests.cs(83,0): at xxxxx.Test.MyTests.ExceptionTest1()

0 passed, 1 failed, 0 skipped, took 1.98 seconds (NUnit 2.5.5).

更新:这个问题的目的不是测试 .Net 框架或 NUnit。我只是想找出在单元测试中处理程序不会触发的原因。

最佳答案

异常将向上渗透调用堆栈,直到您到达可以处理该异常的 try/catch block 、AppDomain 边界或堆栈顶部(按优先级顺序)。

如果您在 NUnit 为您提供的同一个 AppDomain 中执行,NUnit 将捕获您的异常。这会抢占 AppDomain 边界的东西,它会调用你的事件。

因此您的测试需要创建一个新的 AppDomain 并在那里执行它的代码(包括设置,它为 AppDomain.UnhandledException 添加事件处理程序)。那里的一切都应该按预期工作。

关于c# - AppDomain.UnhandledException 处理程序不会在单元测试中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9157991/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com