.Net 5 测试主机在线程中引发异常时崩溃

分享于2022年07月17日 .net-5 c# multithreading vstest 问答
【问题标题】:.Net 5 测试主机在线程中引发异常时崩溃(.Net 5 Test Host Crashes when Exception is thrown in a thread)
【发布时间】:2022-07-11 17:55:52
【问题描述】:

这是我得到的错误:

========== Starting test run ==========
NUnit Adapter 4.2.0.0: Test execution started
Running selected tests in C:\Users\itaib\source\repos\TestHostCrashTest\TestHostCrashTest\bin\Debug\net5.0\TestHostCrashTest.dll
   NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
The active test run was aborted. Reason: Test host process crashed : Unhandled exception. System.Exception: some value
   at TestHostCrashTest.CrashTest.<>c.b__0_0() in C:\Users\itaib\source\repos\TestHostCrashTest\TestHostCrashTest\CrashTest.cs:line 14
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

========== Test run aborted: 0 Tests (0 Passed, 0 Failed, 0 Skipped) run in < 1 ms ==========

当我运行这个测试时:

using NUnit.Framework;
using System.Threading;

namespace TestHostCrashTest
{
    public class CrashTest
    {
        [Test]
        public void CrashTestHost()
        {
            var t = new Thread(() =>
                throw new Exception("some value")
            );

            t.IsBackground = true;
            t.Start();
            t.Join();
        }
    }
}

它在 .net framework 4.6.1 上运行良好,但在 .net 5.0 上崩溃。

我尝试注册 AppDomain.CurrentDomain.UnhandledException ,其中没有任何内容,但没有成功。不幸的是,此时不能优雅地处理异常。

有什么解决方法吗?

顺便说一句,这是 .csproj 文件:


  
    
    net5.0
  
  
    
    
    
  

  • 不,我已经在使用最新的 NuGet(正如您在 .csproj 文件中看到的那样)并且它不是同一个错误,因为在我的情况下它确实找到了测试但是该异常导致测试主机进程崩溃。
  • 好的,我撤回了我的重复投票。
  • Thread 中抛出一个未处理的异常也会导致 .NET Framework 应用程序崩溃。 Fiddle demo .
  • 是的,当然它会像预期的那样使应用程序崩溃,但我要说的是测试主机进程,它在 .net 框架中并没有在 .net 5 中崩溃。我想他们会继续处理未处理的异常并且失败或通过测试(出于某种原因用于通过 .net 框架中的测试)但是他们让测试主机进程崩溃......

【解决方案1】:

当您配置测试主机时,您需要确保使用应用中间件启动您的 TestHost,否则异常不会被处理,它们会在测试中被抛出。