2017-10-15 34 views
0

我剛剛在Just Mock,面臨傳遞此方法的問題,需要幫助來理解問題。只是模擬,嘲笑不按預期工作

我有一個下面,我想測試

public ActionResult Create(JournalViewModel journal) 
    { 
     if (ModelState.IsValid) 
     { 
      var newJournal = _mapper.Map<JournalViewModel, Journal>(journal);// Mapper Updates cause syntax change 

      newJournal.UserId = (int)_membershipService.GetUser().ProviderUserKey; 

      var opStatus = _journalService.AddJournal(newJournal); 
      if (!opStatus.Status) 
       throw new System.Web.Http.HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)); 

      return RedirectToAction("Index"); 
     } 
     else 
      return View(journal); 
    } 

和下面的代碼,我已經測試編寫的代碼

[TestMethod()] 
    public void Create_return_journal() 
    { 

     var userMock = Mock.Create<MembershipUser>(); 
     Mock.Arrange(() => userMock.ProviderUserKey).Returns(1); 
     Mock.Arrange(() => membershipService.GetUser()).Returns(userMock); 

     var opStatusMock = Mock.Create<OperationStatus>(); 
     opStatusMock.Status = true; 
     Mock.Arrange(() => journalService.AddJournal(Mock.Create<Journal>())).Returns(opStatusMock); 


     //Act 
     PublisherController controller = new PublisherController(journalService, membershipService, mapper); 
     ViewResult actionResult = (ViewResult)controller.Create(Mock.Create<JournalViewModel>()); 
     var model = actionResult.Model as JournalViewModel; 

     //Assert 
     Assert.IsNotNull(model); 

    } 

在這裏我期待opstatus.Status是真實的,但得到每次都是假,導致它進入

if (!opStatus.Status) 
       throw new System.Web.Http.HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)); 

TIA

回答

0

完成。以防萬一有人在尋找答案。

我忘了Mock Mapper。

下面是我用來解決這個問題的代碼。

[TestMethod()] 
    public void Create_return_journal() 
    { 
     var journalNew = Mock.Create<JournalViewModel>(); 
     var journal = Mock.Create<Journal>(); 
     Mock.Arrange(() => mapper.Map<JournalViewModel, Journal>(journalNew)).Returns(journal); 

     var userMock = Mock.Create<MembershipUser>(); 
     Mock.Arrange(() => userMock.ProviderUserKey).Returns(1); 
     Mock.Arrange(() => membershipService.GetUser()).Returns(userMock); 

     var opStatusMock = Mock.Create<OperationStatus>(); 
     opStatusMock.Status = true; 

     Mock.Arrange(() => journalService.AddJournal(journal)).Returns(opStatusMock); 

     //Act 
     PublisherController controller = new PublisherController(journalService, membershipService, mapper); 
     RedirectToRouteResult actionResult = (RedirectToRouteResult)controller.Create(journalNew); 


     //Assert 
     Assert.IsNotNull(actionResult); 

    }