2016-01-02 199 views
2

我是Moq的新手,試圖讓我的模擬在ASP.NET MVC中返回一個值。 Doc here。代碼:Moq返回方法返回null

mock = new Mock<IRepository<Story>>(); 

mock.Setup(x => x.GetById(It.Is<int>(i => i==10))) 
    .Returns(It.Is<Story>((Story story) => story.Id == 10 && story.Hits == 0)); 

storiesController = new StoriesController(mock.Object); 

ViewResult result = storiesController.Details(10) as ViewResult; 

Details方法調用storyRepository.GetById(id)

和測試失敗:Assert.IsNotNull(result);因爲GetById方法返回null。

我在做什麼錯?

 public ActionResult Details(int? id) 
     { 
      if (id == null) 
      { 
       return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
      } 
      Story story = storyRepository.GetById(id); 
      if (story == null) 
      { 
       return HttpNotFound(); 
      } 
      story.Hits++; // TODO! 
      storyRepository.Update(story); 
      storyRepository.Save(); 
      return View(story); 
     } 

這是Details方法。在調試模式下,當我跨過被調用的GetById方法時,我看到提取的Story是空的。

回答

1

這是因爲內容時發生了Returns的結果不是一個斷言變化:

當然
mock.Setup(x => x.GetById(10))) 
    .Returns(new Story {Id=10 }); 
+0

哦,對不起,誤會。謝謝! – KSHMR

+0

@Johnath請標記爲正確答案。 –

+0

我會盡快做,它說我可以在5分鐘內標記 – KSHMR