2016-05-31 9 views
0

TDDに従うことで開発スキルを向上させるよう私のチームに動機づけようとしています。ファクトリを使用したクラスでTDD原則に従う方法

1 /私たちは何かが起きたときにトリガされ、一連のアクションを実行するように設計された "ブローカ"を開発しています(電子メール、データを処理し、ファイルを変換する...)。

2 /単純なActivator.CreateInstance(brokerType)のおかげで、アプリケーションの起動時にすべてのブローカーが読み込まれます。

3 /私たちのブローカーの1人は、Excelファイルからレコードを抽出し、関連するレコードをDBで検索しようとしています。

public void Process(string file) 
{ 
    using (var sun = new SunSystemExcelDataSource(ExcelDatasourceFactory.Create(file))) 
    {//...} 
} 

このコードは、指定されたExcelが(XLSX対XLS)を提出し、それがパラメータとして渡された解析できる(IExcelSourceから継承)するクラスを返す工場を呼び出します。そうするために私たちは以下のコードを使用しますSunSystemExcelDataSourceのコンストラクタに渡します。

質問:この方法はほとんどテストすることができません。あなたが私たちにコードテスト能力を向上させるためのヒントを与えることができるかどうか疑問に思っていました。

一般に、工場に依存して自分自身を構築するクラスをテストするにはどうすればよいですか?

コード:

public void Initialize(ILog log, AppSettings settings) 
{ 
    _log = log; 
    _hrdb = DbDatasourceFactory.CreateHrdbDatasource(settings.HrdbConnectionString); 
    _processor = new K2Processor(settings.SettlePaymentWorkflow); 
    _sunFolderPath = settings.SunSystemExcelFolderPath; 
} 
+5

工場静的な型ではないはずですが、依存関係も同様に注入します。このようにしてFactoryをモックし、テスト可能なオブジェクトを返します。 –

+0

Microsoftのシムと偽物は静的メソッドをモックできます。私たちはそれを使うことができます、 –

答えて

0

部品番号ライブラリは、静的メソッドをサポートしていません。しかし、Microsoft ShimsとFakesを使うことができます。

https://msdn.microsoft.com/en-us/library/hh549175.aspx

我々はまだ部品番号を使用することができますが、そのために、我々はこのような何かにコードを変更する必要があり、

public void Initialize(ILog log, AppSettings settings) 
{ 
    Initialize(log, settings, DbDatasourceFactory.CreateHrdbDatasource(settings.HrdbConnectionString); 
} 

// Unit-test this method, 
internal void Initialize(ILog log, AppSettings settings, HrdbDataSource hrdbDataSource) 
{ 
    _log = log; 
    _hrdb = hrdbDataSource; 
    _processor = new K2Processor(settings.SettlePaymentWorkflow); 
    _sunFolderPath = settings.SunSystemExcelFolderPath; 
} 
関連する問題