单元测试 – 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吗?

最佳答案
你可以用MockBehavior.Strict创建Mock。

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

这样,如果您不设置任何期望,则对this.postService的任何调用都将失败

转载注明原文:单元测试 – Moq – 验证没有方法被调用 - 代码日志