我刚刚开始进行单元测试,现在卡住了一个删除测试方法。我正在使用JustMock。下面我提到了我的控制器动作方法和测试方法,但测试方法不起作用。方法的返回值不保留它总是返回false。请指导我在这里做错了什么。
这是测试方法。
[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 :(得分:0)
变化:
Mock.Arrange(() => UserRepository.DeleteUser(mockUser)).Returns(new OperationStatus { Status = true }).MustBeCalled();
为:
Mock.Arrange(() => UserRepository.DeleteUser(mockUser)).IgnoreArguments().Returns(new OperationStatus { Status = true }).MustBeCalled();
或者,向User添加相等运算符,以便它意识到mockUser和selectedUser是相同的&#39;。或者使用lambdas进行参数匹配(参见http://www.telerik.com/blogs/handling-arguments-in-justmock-arrangements)。