起订量,严格VS宽松的用法 [英] Moq, strict vs loose usage

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

问题描述

在过去,我只用犀牛嘲笑,具有典型的严格模拟。我现在用起订量工作的一个项目,我想知道正确的使用方法。

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.

让我们假设我有一个方法吧对象美孚其上调用百事达的方法。对象巴兹

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

在我的测试,我想验证百事达是所谓的,所以我觉得有两种可能的选择:

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?

推荐答案

我以前用严格的嘲笑时,我第一次在单元测试中使用模拟考试开始。这并没有持续很长时间。实际上有2个原因,为什么我不再做这样的:

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. 测试变脆 - 凭借严格的嘲笑您声称不止一件事,那设置方法被调用,而其他方法都不会被调用。当你重构代码的测试经常出现故障,即使你正在尝试测试仍然是正确

  2. 测试更难读 - 你需要对每一个方法的设置是被称为在模拟,即使它没有真正涉及到要测试的内容。当有人读这个测试就很难让他们分不清什么是测试重要的,什么是公正实施的副作用。

由于这些我会强烈建议在单元测试中使用宽松的嘲笑。

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

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

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