unit-testing - 最小起订量单元测试 - 断言与验证

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

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

verify 做了哪些额外的工作?它是 Assert 的替代品吗?

更多的解释会让我明白。

谢谢

最佳答案

断言 vs Mock.Verify

Assert 用于对被测类/对象/主题 (SUT) 进行检查。 验证用于检查是否通知或联系了 SUT 的合作者。

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

验证与验证全部

方法一:

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

方法二

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

因此,如果您对 Mock 有多个操作,或者如果您需要模拟方法返回一个将被处理的值,那么 Setup + Act + VerifyAll 是可行的方法

如果您有几个通知需要检查,那么验证会更容易。

关于unit-testing - 最小起订量单元测试 - 断言与验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22602749/

相关文章:

java - 在 Mockito 中设置后重置模拟的正确替代方法是什么?

c# - 是否可以模拟数据库事务参数?

unit-testing - 使用某些 linq 表达式 (moq) 调用了验证方法

unit-testing - Jacoco 检查与 jacoco 报告中的不同覆盖率值

javascript - AngularJs Jasmine 单元测试中的 $httpBackend

c# - 最小起订量 'TestMethod(Action<int> callback)' 并能够 'call' 回调

c# - 使用 Moq 模拟 GetEnumerator

c# - 具有内部构造函数的最小起订量具体类

java - Mockito 从本地方法内部模拟对象

c# - Moq 具有匿名类型的函数