0

テストする必要がある次のクラスがあります。

public ReportViewModel
{
    public ReportViewModel()
    {           
        using (var repository = new ExecutionDetailsReportRepository())
        {
           this._reportData= repository.GetExecutionDetailsReport(testManager.ExecutionDetail.ExecutionId);
        }
     }
}

コンストラクターは新しい ExecutionDetailsReportRepository を作成し、これをモックする必要があります

私のテストメソッドには、このようなモックセットアップがあります

var mockExecutionDetailsReportRepository = new Mock<IExecutionDetailsReportRepository>(MockBehavior.Loose);
mockExecutionDetailsReportRepository.Setup(ed => ed.GetExecutionDetailsReport(null)).Returns((List<ExecutionDetailsReport> x) => x).Verifiable();

GetExecutionDetailsReport は int を取りますか? パラメータ型として。私は 0 または It.IsAny で設定しようとしましたが、それでも私のテストは、Mocked インスタンスを使用するのではなく、GetExecutionDetailsReport の新しい実際のインスタンスを作成することになります。

Mock Setup の何が問題なのかを理解するのを手伝ってください。Moq 4.0を使用しています

4

1 に答える 1

2

Doc が言うように、Repository インスタンスを注入する必要があります。依存性注入は、基本的にモッキングの前提条件です。ninject または Unity (Unity はゲーム エンジンではなく、Dependency Injector です) について調べてください。

これの最も一般的なパターンは「コンストラクター インジェクション」であり、コンストラクターが次のようになります。

public ReportViewModel(IExecutionDetailsReportRepository xdrp)

次に、New'd up インスタンスの代わりに xdrp を使用します。テストではモックを渡し、ライブ コードでは Unity、Ninject などに依存してそこにインスタンスを取得します...私が言ったように、それらを読んでください:

http://www.ninject.org/

http://unity.codeplex.com/

于 2013-05-24T19:56:06.820 に答える