在断言之前或之后模拟Verify / VerifyAll

Dot*_*nfo 2 c# unit-testing moq mocking

在编写测试时,我已经习惯了遵循代码模式

public void TestMethod_Condition_Output()
{
    //Arrange----------------
    Mock<x> temp = new Mock<x>();
    temp.setup.......

    //Act--------------------
    classinstance.TestMethod()

   //Assert------------------

   temp.VerifyAll();
   Assert.AreNotEqual(.....)    
}
Run Code Online (Sandbox Code Playgroud)

在执行断言之前,我已经习惯于执行VerifyAll()。但是最近在一些在线示例中,我看到人们首先进行断言,然后再进行VerifyAll(如果有)。我确实认为除非丢失任何东西,否则我的方法是正确的方法。

如果我有任何遗漏,请您能提醒我。

tva*_*son 5

我认为,验证应在断言之后进行。我希望断言与被测方法的调用接近,因为它们在记录方法的作用。模拟调用的验证详细说明了类如何使用其依赖项。直接与方法本身联系并不重要。

从某种意义上说,对依赖关系的嘲弄变成了实际测试本身的包装。这使测试更容易理解(无论如何,对我来说,是YMMV)。然后,我的测试遵循以下模式:

安排

  • 嘲笑
  • 设置对依赖的期望
  • 设定预期结果
  • 创建被测课程

法案

  • 调用被测方法

断言

  • 断言实际结果与预期结果相符
  • 验证是否满足期望

我不知道我会对此之以鼻,但这对我来说最有意义。