如何使用JustMock lite对删除方法进行单元测试

时间:2017-06-05 11:25:39

标签: c# asp.net-mvc unit-testing

我刚刚开始进行单元测试,现在卡住了一个删除测试方法。我正在使用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");
    }

我希望我提供了足够的信息。任何帮助非常感谢。

1 个答案:

答案 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)。