5

私はここでの提案が好きです:

SOの質問

次のコードを使用することをお勧めします。

public class SettingsReader()
{
    public SettingsReader(System.IO.StreamReader reader)
    {
        // read contents of stream...
    }
}

// In production code:
new SettingsReader(new StreamReader(File.Open("settings.xml")));

// In unit test:
new SettingsReader(new StringReader("<settings>dummy settings</settings>"));

大きなテスト文字列(つまり、解析するファイルの数行)を「提供」するのがベストプラクティスであるかどうか疑問に思っています。

4

4 に答える 4

3

一般的なアプローチの1つは、テストデータを含むファイルを単体テストアセンブリのリソースに追加し、単体テストでそのデータを読み取ることです。

于 2013-01-16T08:56:08.410 に答える
2

単体テストの場合、埋め込みリソースファイルを使用するのではなく、テストデータをコードに直接表示するのが最善です。

var settings = @"
<settings>
  <a>1</a>
  <b>2</b>
</settings>";

new SettingsReader(new StringReader(settings));
于 2013-01-16T08:55:53.057 に答える
2

別のファイルをアセンブリ埋め込みリソースとして追加し、単体テストでロードするだけです。

Assebmly.GetManifestResourceStreamメソッドを使用して、埋め込みファイルをロードします。

using (var stream = Assembly.GetExecutingAssembly()
       .GetManifestResourceStream(typeof(YourUnitTest), filename))
using(var reader = new StreamReader(stream))
{
    var fileContent = reader.ReadToEnd();
}
于 2013-01-16T08:56:37.957 に答える
0

最も簡単な方法は、単体テストプロジェクトにファイルを追加し、それを使用することです。ファイルのプロパティを「ビルドアクション=なし」および「出力ディレクトリにコピー=新しい場合はコピー」に設定すると、ファイルが単体テストの実行可能ファイルと同じフォルダーにあると見なすことができます。

ソースコード自体に大きな文字列を入れると、ソースコードで文字列をフォーマットする方法が原因で、読みにくくなることがわかりました。特に、テキストにエスケープする必要のある文字が含まれている場合はそうです。すべてのデータを含むテキストファイルがあると、はるかに便利です、IMHO。

単体テストプロジェクト間でテストデータを共有したい場合は、ファイルをソース管理下のどこかに置き、プロジェクトにファイルへのリンク(ファイルのコピーではなく)を追加することで共有できます。そうすれば、維持する元のソースファイルのコピーが1つだけになります。

于 2013-01-16T08:54:59.447 に答える