2010-12-19 3 views
0

コントローラをテストしようとしていますが、それぞれがリポジトリに依存するサービスに依存しています。私は次のコード...私はそのリポジトリのデフォルトのインスタンスを持っていないServiceInterface具体的なクラスに関連したエラーを取得しておくAutoMocker質問

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

を持っている(注入)。私はFakeServiceを作成することを避けようとしていますが、それは私がしなければならないものです。誰もが提案を提供できますか?

答えて

0

あなたはどのクラスをテストしようとしていますか、どのクラスをスタブアウトしようとしていますか?私はあなたのコントローラをテストしようとしており、あなたのサービスをスタブアウトしたいと思います。そうであれば、サービスの具体的な実装、したがってその依存関係は、あなたのテストに全く参加してはならず、無関係でなければなりません。コントローラをテストするために必要なサービスインタフェースの動作をスタブアウトするだけですみます。

私はあなたの意図で推測しているので、私の答えが意味をなさない場合は、テストしようとしていることを示すコードをさらに掲載する必要があります。

+0

私のコントローラ私のサービスに注入された依存関係を持っている、と私のサービスは、注入された依存関係を持っていますリポジトリに保存します。私は私のサービスを擬似しようとしているので、私はそれを注入することができますが、私が実行している問題は私のサービスを偽装しようとしているときに、AutoMockerが擬似サービスに模擬リポジトリを挿入できないというエラーが出ます。これがもう少し説明されることを願っています。 – jsteve81

+0

それは本当に意味をなさない。コントローラがサービスインタフェースに依存していて、コントローラがリポジトリインタフェースに直接依存していない場合、サービスインタフェースをモックすると、NOTHINGはリポジトリに依存する必要があります。その場合、テストには表示されません。テスト環境でリポジトリインタフェースを使用していますか? FakeDataクラスで使用していますか? –

1

My response to this questionは、サービスをプログラミングしてインターフェイスを実行し、依存関係としてそのインターフェイスを使用し、単体テストに役立つサービスを模擬する方法を示しています。

編集

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; 
+0

ありがとうStripling ...私のサービスはすでにインターフェイスを実装しています。詳細については、2番目の答えのコメントを参照してください。 – jsteve81

+0

@jsteve:あなたのコントローラは、サービスインターフェイスや具体的なクラスに依存していますか?コンストラクタがインターフェイスを使用するよう指定した場合、AutoMockは具象クラスの依存関係を認識することはありません。 – StriplingWarrior

+0

サービスインターフェイス – jsteve81

関連する問題