MOQ单元测试 - 断言Vs验证

Per*_*eru 1 unit-testing moq

我试图了解Exactly Verify或VerifyAll的作用?

我正在搜索,我得到了关于使用MOQ的以下信息

Arrange

Mock
Set up expectations for dependencies
Set up expected results
Create class under test
Act

Invoke method under test
Assert

Assert actual results match expected results
Verify that expectations were met
Run Code Online (Sandbox Code Playgroud)

那么验证究竟做了什么?我可以使用Assert测试所有内容,如果有任何失败,单元测试将失败?

验证还有哪些额外的工作?它是Assert的替代品吗?

更多澄清会让我理解.

谢谢

Gis*_*shu 7

Assert vs Mock.Verify

断言用于检查被测试的类/对象/主题(SUT).验证用于检查SUT的协作者是否已收到通知或联系.

因此,如果您正在测试一个汽车对象,它有一个引擎作为协作者/依赖者.在调用car.PushStart()之后,您将使用Assert来查看car.IsHumming.您将使用Verify查看_mockEngine.Ignition()是否收到了调用.

验证与VerifyAll

方法一:

  1. 从随后的Act步骤中明确设置您希望在模拟协作者上触发的所有操作
  2. 行动 - 做一些会导致操作被触发的事情
  3. 调用_mock.VerifyAll():使您在(1)中设置的每个预期都被验证

方法二

  1. 行动 - 做一些会导致操作被触发的事情
  2. call _mock.Verify(m => m.Operation):导致验证操作实际上被调用.每次验证一次验证呼叫.它还允许您检查呼叫计数,例如确切一次,等等.

因此,如果您对Mock有多个操作,或者如果您需要模拟方法来返回将要处理的值,那么Setup + Act + VerifyAll就是要走的路.

如果您要检查一些通知,则验证更容易.