【问题标题】:VS 2019 Running MSTest in MTAVS 2019 在 MTA 中运行 MSTest
【发布时间】:2020-01-02 23:56:06
【问题描述】:

我们有一个带有ThreadPoolWaitHandle 的旧版应用程序。我们想针对它使用 MSTest 编写单元测试。我们遇到了一个问题,默认情况下 MSTest 在 STA(单线程单元)模式下运行并且测试抛出以下异常,

System.NotSupportedException:STA 上的多个句柄的 WaitAll 不支持线程。在 System.Threading.WaitHandle.WaitMultiple(WaitHandle[] waitHandles, Int32 毫秒超时,布尔型 exitContext,布尔型 WaitAll)在 System.Threading.WaitHandle.WaitAll(WaitHandle[] waitHandles, Int32 毫秒超时,布尔退出上下文)在 System.Threading.WaitHandle.WaitAll(WaitHandle[] waitHandles, TimeSpan 超时,布尔exitContext)

【问题讨论】:

    标签: c# mstest sta mta


    【解决方案1】:

    经过一段时间的研究,我们找到了如何将测试设置从 STA 更改为 MTA。

    1. test.runsettings 文件添加到您的解决方案文件夹

      <?xml version="1.0" encoding="utf-8"?>
      <RunSettings>
        <RunConfiguration>
            <ExecutionThreadApartmentState>MTA</ExecutionThreadApartmentState>
        </RunConfiguration>
      </RunSettings>
      
      
    2. 编辑**.Test.csproj文件并引用test.runsettings文件,

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
          ...  
          <RunSettingsFilePath>$(SolutionDir)\test.runsettings</RunSettingsFilePath>
          ...
      </PropertyGroup>
    </Project> 
    

    现在运行你的测试,它应该可以工作了。

    【讨论】:

      猜你喜欢
      • 2017-12-01
      • 1970-01-01
      • 2011-09-08
      • 2011-06-11
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      相关资源
      最近更新 更多