0

コントローラーをテストしようとしていますが、それぞれがリポジトリーに依存するサービスに依存しています。私は次のコードを持っています...

Mock.Get(controller.Get<ServiceInterface>())
            .Setup(s => s.GetData())
            .Returns(FakeData.Create<Entity>(25));

ServiceInterface 具象クラスにリポジトリのデフォルト インスタンスがない (注入された) ことに関連するエラーが発生し続けます。私は FakeService の作成を避けようとしていますが、それが私がしなければならないことのように見えます。誰でもいくつかの提案を提供できますか?

4

2 に答える 2

1

この質問に対する私の回答は、サービスをプログラムしてインターフェイスを満たし、そのインターフェイスを依存関係として使用し、サービスをモックして単体テストに役立てる方法を示しています。

編集

MoqAutoMocker の使用経験がないため、私のアドバイスは限定的です。しかし、Moq を直接使用することから始めて、それが問題を引き起こしているかどうかを確認します。

var serviceMock = new Mock<IService>();
serviceMock.Setup(r => r.GetData())
    .Returns(FakeData.Create<Entity>(25));
var controller = new MyController(serviceMock.Object);

これが機能することを確認したら、自動モックの側面を導入できます。

var autoMocker = new MoqAutoMocker<MyController>();
Mock.Get(autoMocker.Get<IService>()).Setup(r => r.GetData())
    .Returns(FakeData.Create<Entity>(25));
MyController controller = autoMocker.ClassUnderTest;
于 2010-12-20T19:50:27.117 に答える
0

どのクラスをテストしようとしていて、どのクラスをスタブ化しようとしていますか? コントローラーをテストしようとしていて、サービスをスタブ化したいと思います。その場合、サービスの具体的な実装、したがってその依存関係は、テストにまったく参加すべきではなく、無関係であるべきです。コントローラーのテストに必要なサービス インターフェイスの動作のみをスタブ化する必要があります。

私はあなたの意図を推測しているだけなので、私の答えが意味をなさない場合は、テストしようとしているものを示すコードをさらに投稿する必要があるかもしれません.

于 2010-12-20T19:35:52.933 に答える