0

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

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

4

1 回答 1

2

经过一段时间的研究,我们发现了如何将测试设置从 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> 

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

于 2020-01-02T23:56:06.143 回答