2015-04-30 100 views
3

我有一些测试,它们严重依赖于我无法修改的一些共享代码。这个共享代码有时会抛出一个异常,我希望能够处理这个异常的所有未被捕获的实例,而不用在try catch(这里有多年的测试)中包含对共享代码的每个调用。在C#单元测试中实现未处理的异常处理程序

我也希望能够重新抛出不属于我正在寻找的类型的异常。

我已经试过

public void init() 
{ 
    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
} 
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    Logger.Info("Caught exception"); 
    throw (Exception)e.ExceptionObject; 
} 

但现在看来,股市单元测试框架(Microsoft.VisualStudio.QualityTools.UnitTestsFramework)是做一些与AppDomain和阻止我更换其UnhandledException处理或者我只是不明白怎么单元测试框架处理AppDomain s(极有可能)。

任何人有任何建议吗?

+0

如果第三方代码在测试期间抛出未处理的异常,那么当然应该允许该异常影响测试的结果。你为什么要处理这个异常? –

+1

这些例外是在测试期间发生的吗?如果是这样,大多数单元测试框架会在它进入UnhandledException处理程序之前,将其作为运行测试(报告异常)的一部分来捕获异常。 –

+0

@JohnSaunders,我明白,在大多数情况下,我不想处理这个异常,但是这些测试有一个非常复杂的设置步骤,原因可能在于设置。如果我能处理这个例外情况,那么我可以重新建立环境并挽救测试。我知道这是臭的,但它带有领土和它们的复杂性。 –

回答

0

尝试附加到AppDomain.CurrentDomain.FirstChanceException事件。每微软的文档:当一个异常在托管代码中被抛出, 搜索调用堆栈中的应用 域异常处理程序运行之前

发生。

换句话说,你可以在单元测试框架之前捕获它。更多信息here