Moq - 验证没有调用任何方法

时间:2010-07-03 22:01:30

标签: unit-testing mocking moq

这是使用NUnit和Moq从ASP.NET MVC项目中的一个控制器进行的单元测试:

[Test]
public void Create_job_with_modelstate_errors_fails()
{
    var job = new JobDto();
    this.controller.ModelState.AddModelError("", "");

    ActionResult result = this.controller.Create(job);

    this.jobService.Verify(p => p.SaveJob(It.IsAny<JobDto>()), Times.Never());

    // some other asserts removed for brevity
}

这样可以正常工作,但从维护的角度来看,我认为这一行比它需要的更详细:

this.postService.Verify(p => p.SavePost(It.IsAny<PostDto>()), Times.Never());

我真正希望能够做的事情就是......

this.postService.VerifyNoMethodsCalled();

...因为我感兴趣的是我的控制器没有调用服务上的任何方法。这是否可以使用Moq?

1 个答案:

答案 0 :(得分:44)

您可以使用MockBehavior.Strict创建模拟,例如

this.postService = new Mock<IPostService>(MockBehavior.Strict);

这样,如果你没有设置任何期望,任何对this.postService的调用都将失败