2012-01-11 63 views
1

我有以下代碼: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()); 

然而,當GetSchemes方法被調用它返回null?

任何想法?

回答

2

我相信這應該是

service.Setup(X => x.GetSchemes(It.IsAny < SchemeFilterEntity>()))。返回.....

,否則,起訂量會尋找您在setup方法中傳入的'New SchemeFilterEntity()'的確切實例,該實例永遠不會匹配其他任何內容。

編輯:這就是說,你的肚子不應該是你嘲笑的東西,它應該是使用你的嘲弄對象的東西。

+0

是的 - 對不起 - 最後2行只是在那裏顯示,試圖打電話給GetSchemes不會返回預期的東西.. – iwayneo 2012-01-12 09:18:29

+0

頂級香蕉.... – iwayneo 2012-01-12 09:38:04

0

我不知道你特林考什麼,但如果你想「覆蓋」的GetSchema 使用嘲笑對象的方法必須是virtual在類

如果你想用嘲笑的行爲對象存根出INavigationService你在你的設置做以下

......... 

    var sut = service.Object; 

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

,你也應該使用It.IsAny<SchemeFilterEntity>(),而不是創建一個具體的對象

+0

我不希望GetSchemes實際上做它的工作,我認爲重點是能夠僞造GetSchemes調用的結果,以便我可以在測試中使用該服務?最後2行僅用於說明。 – iwayneo 2012-01-11 17:30:30

+0

我編輯了我的答案 – 2012-01-11 17:34:05