MSTestとapp.configの展開を使用してユニットテストの実行を自動化しようとするのに行き詰まっています。複数の投稿とブログを読み、複数のことを試しましたが、それでもMSTestの実行中にapp.configが取得されないようです。 msbuildでビルドしたすべてのユニットテストを含むDLLがあるので、ここで私が試しました...
[DeploymentItem("MyTests.dll.config")]
属性を追加MSTest.exe /noisolation /testcontainer:d:\MyTestTests.dll /test:MyTest
MSTest.exe /runconfig:d:\local.testrunconfig /testcontainer:d:\MyTestTests.dll /test:MyTest
結果: d:\ local.testrunconfigを読み込んでいます...
d:\ local.testrunconfig
d:\ local.testrunconfig
...そして何も起こりません:エラー、テストは実行されません!
編集/解決:デフォルトでは、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);
Kateroh、
私のセットアップは次のようになります(私はTFSbuild.projからmsbuildを使用しています):
Slnをビルドする
すべてを出力から%TEMP%にコピーします(ブラックマジック:D)理由はわかりませんが、mstestは%TEMP%で参照を探しています。
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.testrunconfigは以下のとおりです。
<?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>
アプリケーションはapp.configを使用しません。 application。exe.configを使用します。それはあなたが展開する必要があるものです。
DLLをテストしているのを見ませんでした。
これは.NET構成が機能する方法ではありません。各DLLは、独自の構成ファイルを使用しません。実行している.exeの構成ファイル(実際には、実行しているAppDomainの構成ファイル)のみを使用できます。
MSTESTが.dll.configを実際のホストプロセスであると想定して、独自の構成に追加する必要があります。コマンドラインからそれを行う方法がわかりません。
私は通常Visual Studioで単体テストプロジェクトを使用しているので、そのプロジェクトから構成ファイルを展開するだけです。正常に動作します。
結局のところ、問題は、非常に複雑なビルド環境と、xコピー可能なバージョンのMSTest(ローカルで作成)を使用していることです。次のコマンドは、VS2008の「適切な」MSTestに対して実行したときに成功しました。
"%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe" /testcontainer:d:\MyTests.dll /test:MyTests /resultsfile:results.trx
答えてくれてありがとう!チェックはあなたに行きます、マリウス、あなたは私にあなたのtesrunconfigで新しいことを学ばせました。