C# 如何在单元测试(Visual Studio)中通过WuNobservedTaskException支持运行时设置?
如何通过单元测试(Visual Studio 2012单元测试环境)中的WunoServedTaskException激活运行时设置 我已尝试在单元测试项目中添加App.config文件,其中包含:C# 如何在单元测试(Visual Studio)中通过WuNobservedTaskException支持运行时设置?,c#,visual-studio,unit-testing,exception,task,C#,Visual Studio,Unit Testing,Exception,Task,如何通过单元测试(Visual Studio 2012单元测试环境)中的WunoServedTaskException激活运行时设置 我已尝试在单元测试项目中添加App.config文件,其中包含: <?xml version="1.0" encoding="utf-8" ?> <configuration> <runtime> <ThrowUnobservedTaskExceptions enabled="true"/> <
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
上面的单元测试只是一个简单的示例,用于重现我的问题。这些未处理的异常可能在外部库中调用,而我自己无法处理这些异常。我不确定如何导致测试失败,但以下代码至少导致异常信息出现在测试输出中:
[TestInitialize]
public void SetThrowUnobservedTaskExceptions()
{
Type taskExceptionHolder = typeof(Task).Assembly
.GetType("System.Threading.Tasks.TaskExceptionHolder", false);
if (taskExceptionHolder != null)
{
var field = taskExceptionHolder.GetField("s_failFastOnUnobservedException",
BindingFlags.Static | BindingFlags.NonPublic);
field.SetValue(null, true);
}
}
看起来终结器线程的本机代码检查了一个无法通过反射设置的附加属性,这实际上会导致进程终止。不过,我不能100%确定。您必须使用Framework 4.5+,不要忘记删除旧配置,以便复制新配置(使用
ThrowUnobservedTaskExceptions
集)。那么它应该会起作用。VS2013u4。
[TestInitialize]
public void SetThrowUnobservedTaskExceptions()
{
Type taskExceptionHolder = typeof(Task).Assembly
.GetType("System.Threading.Tasks.TaskExceptionHolder", false);
if (taskExceptionHolder != null)
{
var field = taskExceptionHolder.GetField("s_failFastOnUnobservedException",
BindingFlags.Static | BindingFlags.NonPublic);
field.SetValue(null, true);
}
}