2012-01-11 2 views
1

私は、次のコードを持っている:GetSchemesメソッドが呼び出されたときにMoq.Setupが期待したコレクションを返さない?

 var service = new Mock<INavigationService>(); 

     service.Setup(x => x.GetSchemes(new SchemeFilterEntity())).Returns(new List<SchemeEntity> 
      { 
       new SchemeEntity 
        { 
         Id = 1, 
         Name = "Test" 
        }, 
       new SchemeEntity 
        { 
         Id = 2, 
         Name = "Test 2" 
        } 
      }); 

     var sut = service.Object; 

     var sut = service.GetSchemes(new SchemeFilterEntity()); 

は、しかし、それはnullを返しますか?

アイデア?

答えて

2

It.IsAny<SchemeFilterEntity>()を使用する代わりに、具体的なオブジェクトを作成する必要があり、あなたのセットアップに

以下
......... 

    var sut = service.Object; 

    SomeThing.UseNavigavtionService(sut); //this is supposed to be the class which you will test.Sut is a mocked INavigationService 

をしなければなりませんそれは

service.Setup(X => x.GetSchemes(It.IsAny < SchemeFilterEntity>()))であるべきと考えている。戻り.....

そうでない場合は、MOQは、となりますので、 setupメソッドで渡した '新しいSchemeFilterEntity()'の正確なインスタンスを探します。これは決して他のものとはまったく一致しません。

編集:それは、あなたの靴があなたが嘲笑しているものであってはならない、それはあなたの嘲笑されたオブジェクトを使用しているものでなければならないと言いました。

+0

ええ、ごめんなさい - 最後の2行は、GetSchemesを呼び出そうとすると予想されるものが返されないことを示しています。 – iwayneo

+0

top bananas .... – iwayneo

0

あなたが「上書き」嘲笑オブジェクトを使用してGetSchema の振る舞いをしたい場合、私はあなたが嘲笑を使用する場合の方法は、クラス

virtualでなければならないことをテストするトリングているのか分からないがINavigationServiceをスタブアウトするオブジェクトあなたは、私はあなたにも

+0

私はGetSchemesが実際にその作業をしないようにするために、私はテストでサービスを使用できるようにGetSchemes呼び出しの結果を偽造できると思っていましたか?最後の2行は説明のためのものです。 – iwayneo

+0

私は自分の答えを編集しました –

関連する問題