我有一个扩展方法。这是:
public static void BeginInvokeWithAutoEnd(this EventHandler handler, object sender, EventArgs eventArgs)
{
var buffer = handler;
buffer.BeginInvoke(sender, eventArgs, buffer.EndInvoke, null);
}
要测试它,有以下方法:
[TestMethod]
public void BeginInvokeWithAutoEnd_SubscribedMethodThrowsException_ExceptionCanBeCaught()
{
var multiThreadTest = new MultiThreadTest(2);//Class that helps to test asynchronous stuff
var thrown = false;
var ex = new Exception("OOoooOOo!");
EventHandler onHandler = (s, a) => { throw ex; };
UnhandledExceptionEventHandler currentDomainOnUnhandledException = (s, args) =>
{
thrown = args.ExceptionObject.Equals(ex);
multiThreadTest.Notify();
};
AppDomain.CurrentDomain.UnhandledException += currentDomainOnUnhandledException;
//Invokes Action from the parameter and waits for multiThreadTest.Notify(); method to be called, otherwise 2 seconds
multiThreadTest.Act(() => onHandler.BeginInvokeWithAutoEnd(this, EventArgs.Empty));
AppDomain.CurrentDomain.UnhandledException -= currentDomainOnUnhandledException;
Assert.IsTrue(thrown);
}
测试本身工作正常,但它随机打破了我的其他测试之一。当我查看破损的测试时,会写出:The agent process was stopped while the test was running.
。这意味着在另一个线程中存在未处理的异常,而损坏的测试正在运行。
我不知道怎么会发生这种情况。将在这里感谢任何帮助。
答案 0 :(得分:1)
尝试使用" .Net Runtime"检查事件查看器(事件查看器 - > Windows日志 - >应用程序)。作为来源。如果存在一些未处理的异常,则应将其记录在那里。
答案 1 :(得分:0)
这对我来说太愚蠢了。
测试的工作流程:
- 测试开始了
- 异常被抛入另一个线程(让我们称之为“线程X”)
- AppDomain.CurrentDomain.UnhandledException
被提出
- 测试结束,而“线程X”仍然运行并且还没有完成抛出异常
- “线程X”抛出异常,而另一个测试已经开始
由于某些未知原因,我认为订阅AppDomain.CurrentDomain.UnhandledException
将阻止抛出异常。对我来说真傻。