2017-06-05 68 views
1

我剛剛開始進行單元測試,現在停止編寫刪除測試方法。我正在使用JustMock。下面我提到了我的控制器操作方法和測試方法,但測試方法不起作用。該方法的返回值不保留它總是返回false。請在這裏指導我做錯了什麼。如何使用JustMock lite單元測試刪除方法

這是測試方法。

[TestMethod] 
    public void Delete_User() 
    { 
     Mapper.CreateMap<UserViewModel,User>(); 

     IStaticMembershipService membershipRepository = Mock.Create<IStaticMembershipService>(); 

     var mockUserViewModel = new UserViewModel { Id = 1}; 

     var mockUser = Mapper.Map<UserViewModel, User>(mockUserViewModel); 
     var UserRepository = Mock.Create<IUserRepository>(); 

     Mock.Arrange(() => UserRepository.DeleteUser(mockUser)).Returns(new OperationStatus { Status = true }).MustBeCalled(); 

     UserController controller = new UserController(UserRepository, membershipRepository); 
     ActionResult result = controller.Delete(mockUserViewModel); 

     Mock.Assert(() => UserRepository.DeleteUser(mockUser), Occurs.AtLeastOnce()); 
    } 

任何相關的控制器信息。

private IUserRepository _UserRepository; 
    private IStaticMembershipService _membershipService; 

    public UserController(IUserRepository UserRepo, IStaticMembershipService membershipService) 
    { 
     _UserRepository = UserRepo; 
     _membershipService = membershipService; 
    } 

存儲庫正確嘲笑,但被退回的「opStatus」屬性始終爲false不是我所指定的值是結果TestMethod的。

public ActionResult Delete(UserViewModel usr) 
    { 
     var selectedUser = Mapper.Map<UserViewModel, User>(usr); 

     var opStatus = _UserRepository.DeleteUser(selectedUser); 
     if (!opStatus.Status) 
      throw new System.Web.Http.HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); 

     return RedirectToAction("Index"); 
    } 

我希望我已經提供了足夠的信息。任何幫助非常感謝。

+0

測試設置中的'mockUser'和被測方法中的'selectedUser'是不同的實例,所以當被測方法被執行時它們不匹配。 – Nkosi

+0

除了在這裏調用測試方法時設置忽略所有參數之外,其他解決此問題的其他方法都是如此。 –

回答

0

變化:

Mock.Arrange(() => UserRepository.DeleteUser(mockUser)).Returns(new OperationStatus { Status = true }).MustBeCalled();

到:

Mock.Arrange(() => UserRepository.DeleteUser(mockUser)).IgnoreArguments().Returns(new OperationStatus { Status = true }).MustBeCalled();

另外,加平等運營商的用戶,使其認識到mockUser和selectedUser是 '相同'。或者使用lambdas進行參數匹配(請參閱http://www.telerik.com/blogs/handling-arguments-in-justmock-arrangements)。