0

と を含むレガシー アプリケーションがThreadPoolありWaitHandleます。それに対してMSTestを使用して単体テストを書きたかったのです。デフォルトでは、MSTest が STA (Single Thread Apartment) モードで実行され、テストが次の例外をスローするという問題が発生しました。

System.NotSupportedException: STA スレッドの複数のハンドルに対する WaitAll はサポートされていません。System.Threading.WaitHandle.WaitMultiple (WaitHandle[] waitHandles、Int32 ミリ秒タイムアウト、Boolean exitContext、Boolean WaitAll) で System.Threading.WaitHandle.WaitAll (WaitHandle[] waitHandles、Int32 ミリ秒タイムアウト、Boolean exitContext) で System.Threading.WaitHandle. WaitAll(WaitHandle[] waitHandles, TimeSpan タイムアウト, Boolean 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 に答える