設定ファイルに依存する単体テストを書きました。このfile.config
はテストプロジェクトのbin\Debug
ディレクトリに展開されます。しかし、テストが実際に行われる出力テストディレクトリにはコピーされていないようです。ユニットテスト中にテスト結果ディレクトリにコピーされている設定ファイルを作る方法は?
私が検索し、これらを発見した:
TFS UnitTesting not deploying local copy assembly to test dir when on build server
Test project and config file
最初のリンクは、私は私のテストプロジェクトのbin\Debug
ディレクトリに私の設定ファイルを展開する方法を見つけることができました。
2番目の方法では解決策が示されますが、自分のニーズに少し不満があります。テストするクラスなどを追加する必要はありません。この設定ファイルをテスト結果ディレクトリに自動的にコピーしてください。
EDIT#1
私が使用している:
- マイクロソフトエンタープライズライブラリ4.1の名前付き接続と一緒に。 with
- Microsoft Visual Studio 2008;および
- Microsoft UnitTest Framework。
<configuration> <configSections> <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </configSections> <dataConfiguration defaultDatabase="Tests" /> <connectionStrings> <add name="Tests" connectionString="Database=Tests;Server=(local)\SQLEXPRESS;Integrated Security=SSPI" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
と命名されています:
Tests.config
私の設定ファイルは、次のようになります。
ここでは、デフォルトのソース名を含むDefaultSource
パラメータを含むプロジェクト設定があります。つまり、接続とデータベースオブジェクトを作成するためのものです。この設定の値はTests
です。
私は新しい接続を作成するときに、私は単純にそうようにそれを行うので、:今すぐ
public static IDbConnection CreateConnection(string source) {
return new DatabaseProviderFactory(new FileConfigurationSource(
string.Format("{0}\{1}.config", AppDomain.CurrentDomain.BaseDirectory, source)
).CreateDefault().CreateConnection();
}
、それが原因で返されAppDomain.CurrentDomain.Basedirectory
値の、ユニットテストしながら、適切に動作しない、このです。このプロパティはアセンブリビルドディレクトリbin\Debug
を返しません。実際にはテストが実際に実行されるTestResults[auto-generated-test-results-directory]
です。だから、
、私のテストでは、私が行います
DefaultSource
プロパティ値が
Tests
である私のデフォルトソースの設定パラメータを返します
[TestMethod()]
public void Connection_InitializationWithSourceName() {
using connection as IConnection = ConnectionProviderFactory.CreateConnection(DefaultSource) {
// Asserts here...
}
}
を。したがって、FileConfigurationSource
オブジェクトクラスは、前述のように、テストが実際に実行されるテスト結果ディレクトリでTests.config
というファイルを検索します。
どうすればいいですか?
ありがとうございます!=)
+1これは素晴らしい考えです。そして、テスト実行時に自動的に生成されるテスト結果ディレクトリ名、つまり 'C:\ MyProject.Tests \ TestResults \ [auto-generated-test-result-directory ] \ Out'。これは、私を混乱させ、ポストビルドをコピーできないようにする '[自動生成]'の部分です。 –
少なくとも2つのオプションがあります:この '[自動生成された]'がどのように動作し、自分でロジックを再構築するかを決定します。あるいは、 'C:\ MyProject.Tests \ TestResults \ * \ Out'のようなパスを持つサブディレクトリにconfigファイルをコピーします。つまり、コピーするタスク用の小さなプログラムやスクリプトを作成する必要があります(通常、そのようなタスクにはVBScriptを選択しますが、そのために好きなツールを選択することができます)。 –