構成ファイルに依存するいくつかの単体テストを作成しました。これは、テスト プロジェクト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番目は実用的な解決策を示していますが、テストするクラスを自分で追加することなどは言うまでもなく、私のニーズには少しやり過ぎだと思います。テスト結果ディレクトリに自動的にコピーされます。
編集#1
私は使用しています:
- Microsoft Enterprise Library 4.1 とその名前付き接続。と
- Microsoft Visual Studio 2008; そしてその
- マイクロソフト ユニットテスト フレームワーク。
私の設定ファイルは次のようになります。
<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]
、テストが実際に実行される場所を返すためです。
だから、私のテストで私がするとき:
[TestMethod()]
public void Connection_InitializationWithSourceName() {
using connection as IConnection = ConnectionProviderFactory.CreateConnection(DefaultSource) {
// Asserts here...
}
}
where DefaultSource
property は、値が であるデフォルトのソース設定パラメーターを返しますTests
。そのため、前述のように、FileConfigurationSource
オブジェクト クラスはTests.config
、テストが実際に実行されるテスト結果ディレクトリで呼び出されるファイルを検索します。
それを行う方法のアイデアはありますか?
ありがとう!=)