6

app.configテスト対象のターゲットプロジェクトによって定義された実際の構成ファイルのモックである、独自のファイルを含む単体テストプロジェクトがあります。このモック ファイルは、(ターゲット プロジェクトではなく) 単体テスト コードによって読み込まれ、処理されます。この 1 つのテスト プロジェクト内でのみテストを実行すると、正常に動作します。

ConfigurationManager.GetSection(sectionName)

ただし、複数のテスト プロジェクトからテストを実行し、関連するプロジェクトの前に他のテスト プロジェクトを実行すると、上記のステートメントは を返しますnull。前述のテスト プロジェクトを最初に実行すると、構成ファイルの読み込みに問題はありません。

単体テストで構成ファイルの読み込みを修正して正しく動作させるにはどうすればよいですか?

4

4 に答える 4

9

問題は ConfigurationManager.GetSection(sectionName) が null を返すことではありません。ConfigurationManager.GetSection(sectionName) を含むコードをテストするにはどうすればよいですか?

答えは次のとおりです。ラップして注入し、テスト用にモックします。

同じ問題に直面している人々の例がいくつかあります。

(2 番目のものはより詳細ですが、考え方は同じです)。

いずれにせよ、完全に独立したテストを作成する必要がある場合、app.config はアプリケーション全体のコンテキストに依存するため、単体テストで app.config からの情報を使用できないことは非常に論理的です。app.config 値を直接使用すると、非論理結合になります。

于 2013-09-04T07:01:09.163 に答える
2

同じ問題に直面して、これで解決しました。 プロパティがに設定されている場合、または DeploymentItem 属性を追加した場合はapp.config、単体テスト内で取得する必要があります。Copy to Output DirectoryCopy if newer[DeploymentItem("your.config")]

詳細な説明: http://social.msdn.microsoft.com/Forums/en-US/3e520735-8ced-4092-b681-38b69e0db534/unit-test-configuration#32998bf4-5a76-4083-99da-42f0c3a91559

同様の質問: MSTest と app.config の問題

于 2013-09-04T08:59:48.660 に答える
1

問題は、テスト作業ディレクトリでファイルが見つからなかったか、ファイル自体の読み込みに失敗したことだと思います。

名前付きの構成ファイルを明示的にロードすることで、この問題を解決しました。あなたの場合、同じことを試すことができます。

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\test.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
于 2013-09-09T08:01:16.320 に答える