MOQ单元测试 - 断言Vs验证

时间:2014-03-24 06:50:58

标签: 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

那么验证到底是什么?我可以使用Assert测试所有内容,如果有任何故障,单元测试将失败?

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

更多澄清会让我明白。

谢谢

1 个答案:

答案 0 :(得分:7)

Assert vs Mock.Verify

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

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

验证与VerifyAll

方法一:

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

    1. 法案 - 做一些会导致操作被触发的事情
    2. 调用_mock.Verify(m => m.Operation):导致验证操作实际上已被调用。每次验证一次验证呼叫。它还允许您检查呼叫的数量,例如恰好一次,等等。
    3. 因此,如果您对Mock有多个操作,或者如果您需要使用模拟方法返回将要处理的值,那么Setup + Act + VerifyAll就是要走的路

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