web-dev-qa-db-ja.com

MSTestとapp.configの問題

MSTestとapp.configの展開を使用してユニットテストの実行を自動化しようとするのに行き詰まっています。複数の投稿とブログを読み、複数のことを試しましたが、それでもMSTestの実行中にapp.configが取得されないようです。 msbuildでビルドしたすべてのユニットテストを含むDLLがあるので、ここで私が試しました...

試行1

  1. MyTests.dllがMyTests.dll.configと同じ場所にapp.configをコピーしました(msdnフォーラムの1つで、自動的にピックアップされると言われていました)
  2. 各テストに[DeploymentItem("MyTests.dll.config")]属性を追加
  3. ランMSTest.exe /noisolation /testcontainer:d:\MyTestTests.dll /test:MyTest

試行2

  1. 次の内容でlocal.testrunco​​nfigファイルを作成しました(下記)
  2. / runco​​nfigを使用してmstestを実行しましたが、分離はありませんでしたが、何も実行されませんでした:MSTest.exe /runconfig:d:\local.testrunconfig /testcontainer:d:\MyTestTests.dll /test:MyTest

結果: d:\ local.testrunco​​nfigを読み込んでいます...
d:\ local.testrunco​​nfig
d:\ local.testrunco​​nfig

...そして何も起こりません:エラー、テストは実行されません!


編集/解決:デフォルトでは、MSTestは個別のプロセスでテストを実行します。この場合、「dllname.dll.config」のような名前が付けられていると、構成ファイルは自動的に取得されます。ただし、別のプロセスで実行されているテストをVSの外部で実行すると、デバッグするのが難しくなります。/noisolationスイッチは、MSTestにすべてのテストを1つのプロセスで実行させるために使用されます。ただし、この場合、テスト構成ファイルは[〜#〜] not [〜#〜]です。代わりに、MSTestと同じディレクトリにあるMSTest.exe.configファイルが使用されます。この問題を解決するには、構成ファイルを次のように実用的にロードします。


ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = @"path to config file";
Configuration config = 
   ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
34
kateroh

Kateroh、

私のセットアップは次のようになります(私はTFSbuild.projからmsbuildを使用しています):

  1. Slnをビルドする

  2. すべてを出力から%TEMP%にコピーします(ブラックマジック:D)理由はわかりませんが、mstestは%TEMP%で参照を探しています。

  3. Partestでmstestを実行します。

"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" /nologo /testcontainer:$(TestDir)\mylib.dll /resultsfile:$(TestResultFile) /runconfig:$(SlnDir)\AutomaticBuildTest.testrunconfig /searchpathroot:$(TestDir) /publish:mytfsserver /publishbuild:$(BuildDefinition) /flavor:Debug /platform:AnyCPU /teamproject:mytfsproject

ここで、AutomaticBuildTest.testrunco​​nfigは以下のとおりです。


<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="AutomaticBuildTest" id="eda99352-93e1-402e-9517-d04fffa66b35" xmlns="http://Microsoft.com/schemas/VisualStudio/TeamTest/2010">
    <!--<Deployment enabled="false" />-->
    <Deployment enabled="true">
        <DeploymentItem filename="D:\sa12\78\bin\Debug" />
    </Deployment>
    <NamingScheme baseName="BC2ALibraryTest" appendTimeStamp="false" useDefault="false" />
    <!-- http://blogs.msdn.com/b/vstsqualitytools/archive/2009/12/01/executing-unit-tests-in-parallel-on-a-multi-cpu-core-machine.aspx -->
    <Execution location="Local" hostProcessPlatform="MSIL">
        <!--http://msdn.Microsoft.com/en-us/library/ms404663.aspx-->
        <ExecutionThread apartmentState="MTA" />
        <Hosts skipUnhostableTests="false" />
        <TestTypeSpecific>
            <UnitTestRunConfig testTypeId="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b">
                <AssemblyResolution applicationBaseDirectory="D:\sa12\78\bin\Debug">
                    <TestDirectory useLoadContext="false" />
                </AssemblyResolution>
            </UnitTestRunConfig>
        </TestTypeSpecific>
        <AgentRule name="LocalMachineDefaultRole">
        </AgentRule>
    </Execution>
</TestSettings>

6
MariusCC

アプリケーションはapp.configを使用しません。 application。exe.configを使用します。それはあなたが展開する必要があるものです。


DLLをテストしているのを見ませんでした。

これは.NET構成が機能する方法ではありません。各DLLは、独自の構成ファイルを使用しません。実行している.exeの構成ファイル(実際には、実行しているAppDomainの構成ファイル)のみを使用できます。

MSTESTが.dll.configを実際のホストプロセスであると想定して、独自の構成に追加する必要があります。コマンドラインからそれを行う方法がわかりません。

私は通常Visual Studioで単体テストプロジェクトを使用しているので、そのプロジェクトから構成ファイルを展開するだけです。正常に動作します。

5
John Saunders

結局のところ、問題は、非常に複雑なビルド環境と、xコピー可能なバージョンのMSTest(ローカルで作成)を使用していることです。次のコマンドは、VS2008の「適切な」MSTestに対して実行したときに成功しました。

"%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe" /testcontainer:d:\MyTests.dll /test:MyTests /resultsfile:results.trx

答えてくれてありがとう!チェックはあなたに行きます、マリウス、あなたは私にあなたのtesrunco​​nfigで新しいことを学ばせました。

2
kateroh