首页 > 解决方案 > 成功执行所有测试后导致 vstest 挂起的原因

问题描述

我们正在使用 Visual Studio 测试框架和 C# 编写单元测试,最近我们遇到了一个问题,即 vstest.console.exe 在执行所有测试后有时会挂起。所有测试都通过了,但是 vstest.console.exe 只是永远坐在那里等待某事,而不是退出。

这可能与我们最近开始使用第三方库的变化有关。在调试中运行测试时,我们可以看到该库创建的多个线程在所有测试都已经通过后仍然挂起。

为了更好地理解问题,我尝试重现该问题,如下面的测试代码所示。但是,似乎 vstest.console.exe 在完成这样的测试后非常乐意退出。它似乎并不关心仍在运行的任何“野”线程。所以我的问题是:是什么导致 vstest 在执行所有测试后等待或不等待线程?换句话说,我应该如何修改下面的测试以使vstest在完成后挂起?

[TestMethod]
public void FreezeVSTest()
{
    var thread = new Thread(
        new ThreadStart(
            delegate
            {
                while (true)
                {
                    Thread.Sleep(1);
                }
            }));
    thread.Start();
}

(请注意,我不是在问如何使测试挂起,我知道添加一个 thread.Join() 可以实现这一点。问题是测试通过后 vstest 本身挂起。)

标签: c#.netmultithreadingvstestvstest.console.exe

解决方案


推荐阅读