2011-08-09 10 views
0

私はTDDを検討しています。私はいくつかの助けを借りることができるシナリオを見つけました。TDDは内部コンストラクタにMocked Repository(UnitOfWork)を挿入します

私のプロジェクトはMVC3を使用し、BALとDALレイヤーを持つように構成されています。各レイヤーはそれぞれ独自のプロジェクトに含まれています。 BALは、リポジトリパターンを介してデータベースにアクセスします。私はEntityFrameworkを使用しているので、UnitOfWorkパターンも実装しました。

public class ExampleService 
{ 
    private UnitOfWork unitOfWork; 
    private bool isProcessing = false; 

    internal ExampleService(UnitOfWork unitOfWork) 
    { 
     this.unitOfWork = unitOfWork; 
    } 
    public void ExposedMethod() 
    { 
     //do stuff with the unitOfWork 
    } 
} 

質問:私は、このためのユニットテストを作成したいと思います(もちろん、私はコードの前にテストを書かれているはずです)。ここBALでのサービスクラスは次のようになります。ただし、コードをそのまま実行すると、UnitOfWorkを使用してデータベースに接続するため、テストは統合テストになります。私は、メモリ内のダミーデータにアクセスする新しいUnitOfWorkをモックアップすることができますが、コンストラクタが内部であるため、それを挿入する方法を理解していません。私はむしろ各プロジェクトの内部にある単体テストを書いてはいけません。

どのような考えですか?

答えて

3

[InternalsVisibleTo]属性でこのクラスを含むアセンブリを装飾して、すべての内部メンバをユニットテストプロジェクトに表示させることができます。

もう1つの可能性は、このコンストラクタをpublicにすると、クラスをより再利用できるようにすることです。通常、DIワイヤーアップはアーキテクチャーの最外層(GUI)で行う必要があり、この依存関係の異なるコンストラクターは公開する必要があります。これにより、このDALレイヤーを他のプロジェクトで再利用することができます。

+0

[InternalsVisibleTo]はそのまま私の質問を解決します。私はまだDIで何かを見逃しているかもしれませんが、私が示したクラスの例はBALにあり、UnitOfWorkはDALにあります。サンプルクラスへのアクセスを制御する別のクラスがあるので、コンストラクタをinternalとマークしました。私はもう少しこれを考慮する必要があります。ありがとう! – AFrieze

関連する問題