gpt4 book ai didi

c# - 最小起订量,严格与宽松的用法

转载 作者:IT王子 更新时间:2023-10-29 03:51:00 25 4
gpt4 key购买 nike

过去,我只使用过 Rhino Mocks,具有典型的严格模拟。我现在正在与 Moq 合作进行一个项目,我想知道正确的用法。

假设我有一个带有方法 Bar 的对象 Foo,它调用对象 Buzz 的 Bizz 方法。

在我的测试中,我想验证 Bizz 是否被调用,因此我觉得有两种可能的选择:

严格模拟

var mockBuzz= new Mock<IBuzz>(MockBehavior.Strict);
mockBuzz.Setup(x => x.Bizz()); //test will fail if Bizz method not called
foo.Buzz = mockBuzz
foo.Bar();
mockBuzz.VerifyAll();

用松散的模拟

var mockBuzz= new Mock<IBuzz>();    
foo.Buzz = mockBuzz
foo.Bar();
mockBuzz.Verify(x => x.Bizz()) //test will fail if Bizz method not called

是否有标准或正常的方法来执行此操作?

最佳答案

当我第一次开始在单元测试中使用 mock 时,我曾经使用过严格的 mock。这并没有持续很长时间。我停止这样做的真正原因有两个:

  1. 测试变得脆弱 - 使用严格的模拟,您断言不止一件事,调用设置方法,并且不调用其他方法。当您重构代码时,测试通常会失败,即使您尝试测试的内容仍然正确。
  2. 测试更难阅读 - 您需要为模拟中调用的每个方法设置一个设置,即使它与您要测试的内容并不真正相关。当有人阅读这个测试时,他们很难说出什么对测试很重要,什么只是实现的副作用。

由于这些原因,我强烈建议您在单元测试中使用松散模拟。

关于c# - 最小起订量,严格与宽松的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4996327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com