「ユニットテストの芸術」atmを読んでいて、プロパティを使用してインターフェイスに渡す際に問題が発生しています。この本には、次のように記載されています。
プロパティの例のコードは次のとおりです。
public class LogAnalyzer
{
private IExtensionManager manager;
public LogAnalyzer ()
{
manager = new FileExtensionManager();
}
public IExtensionManager ExtensionManager
{
get { return manager; }
set { manager = value; }
}
public bool IsValidLogFileName(string fileName)
{
return manager.IsValid(fileName);
}
}
[Test]
Public void
IsValidFileName_NameShorterThan6CharsButSupportedExtension_ReturnsFalse()
{
//set up the stub to use, make sure it returns true
...
//create analyzer and inject stub
LogAnalyzer log = new LogAnalyzer ();
log.ExtensionManager=someFakeManagerCreatedEarlier;
//Assert logic assuming extension is supported
...
}
この機能をいつ/どのように使用しますか?? 私が考えることができる唯一のシナリオ (これはおそらく間違っています!) は、1 つのクラスに 2 つのメソッドがある場合です。
Method1() は、構成ファイルからデータベース接続文字列を取得し、取得した文字列に対する何らかの形式のチェックを含みます。
その後、Method2() はデータベースに接続し、いくつかのデータを返します。ここでのチェックは、返されたデータが null でないことでしょうか?
この場合、Method1() をテストするために、IExtensionManager インターフェイスを実装するスタブを宣言することができます。このスタブには、method1() で行ったエラー チェックに合格する必要がある文字列があります。
Method2() の場合、インターフェイスを実装するスタブを宣言し、データを含むデータテーブルをスタブ クラスで宣言します。次に、プロパティを使用してこれをプライベート マネージャー変数に割り当て、Method2? を呼び出します。
上記は完全な BSである可能性があります。
ありがとう