起订量,严格与宽松使用 [英] Moq, strict vs loose usage

查看:15
本文介绍了起订量,严格与宽松使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在过去,我只使用 Rhino Mocks,具有典型的严格模拟.我现在正在与 Moq 合作开展一个项目,我想知道如何正确使用.

In the past, I have only used Rhino Mocks, with the typical strict mock. I am now working with Moq on a project and I am wondering about the proper usage.

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

Let's assume that I have an object Foo with method Bar which calls a Bizz method on object Buzz.

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

In my test, I want to verify that Bizz is called, therefore I feel there are two possible options:

严格的模拟

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

是否有标准或正常的方式来做这件事?

Is there a standard or normal way of doing this?

推荐答案

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

I used to use strict mocks when I first starting using mocks in unit tests. This didn't last very long. There are really 2 reasons why I stopped doing this:

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

因此,我强烈建议您在单元测试中使用松散的模拟.

Because of these I would strongly recommend using loose mocks in your unit tests.

这篇关于起订量,严格与宽松使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆