假货比Mocks好吗?

Fra*_*ega 49 c# unit-testing mocking fakeiteasy

我偶然发现了这个开源项目Fake It Easy,我不得不承认,它看起来非常有趣,但是我怀疑,FIE假货和Moq Mocks有什么区别?有没有更好的特定用途?

编辑:

这个新框架能比Moq更好吗?

Pat*_*gne 93

需要明确的是,我创建FakeItEasy所以我绝对不会说一个框架是否比其他更好的,有什么我能做的就是指出一些分歧和激励为什么我创建FakeItEasy.在功能上,Moq和FakeItEasy之间没有重大差异.

FakeItEasy没有"可验证"或"期望"它有断言但是,这些在测试的最后总是明确说明,我相信这使得测试更容易阅读和理解.它还有助于初学者避免多个断言(他们会在许多调用或模拟对象上设置期望).

之前我使用过Rhino Mocks,我非常喜欢它,特别是在引入AAA语法之后,我确实更喜欢Moq的流畅API.我不喜欢Moq的是"模拟对象",你必须使用mock.Object无处不在,我更喜欢Rhino-approach与"自然"模拟.每个实例看起来和感觉就像伪造类型的正常实例.我想要两全其美,而且我想看看当我完全放手时我能用语法做什么.我个人(显然)认为我创造了一个与两个世界中最好的混合的东西,但是当你站在巨人的肩膀上时,这很容易.

正如在这里提到的那样,主要区别之一在于术语,FakeItEasy首先被创建用于引入TDD并嘲笑初学者并且不得不担心前面的模拟和存根之间的差异(你在Rhino中必须采用的方式)是在我看来并不是很有用.

我把很多注意力集中在异常消息上,应该很容易在测试异常消息时判断出什么是错误的.

FakeItEasy具有一些其他框架所没有的可扩展性功能,但这些功能还没有很好的记录.

FakeItEasy(希望)在模拟具有构造函数参数的类中更强一些,因为它具有解析虚拟值的机制.您甚至可以通过在测试项目中实现DummyDefinition(Of T)类来指定自己的虚拟值定义,这将由FakeItEasy自动获取.

语法是一个明显的区别,一个更好的主要是品味问题.

我确信我现在忘记了很多其他的差异(并且公平地说我从未在生产中使用Moq,所以我对它的了解有限),我认为这些是最重要的差异.

  • +1没有什么比作者的帖子更好:-) (33认同)
  • 是的,我们在大型项目的工作场所欺骗FakeItEasy,已经这样做了一年多. (2认同)

Ada*_*tek 25

测试中使用的术语可能会有些混乱.解释不同概念之间差异的最佳来源是Martin Fowler的Mocks Are Not Stubs.总之,fake是一个描述存根和模拟的通用术语.

  • 大声笑的任何问题与模拟或假标签应弹出一个"你读过马丁福勒的文章"弹出:P (5认同)

Tho*_*ler 11

嘲弄中的术语可能令人困惑 - 有时甚至是非常不直观的.

因此,许多人提出了一个更简单的新术语,你只有假货,模拟存根.

是所有可能类型的测试双打的通用术语,无论它们来自何处以及如何使用它们.

除此之外,假货只能在一个方面区分:它们是否会影响测试结果; 或者,换句话说:你是否必须设置假的返回值,它们在测试执行期间以某种方式使用,或者它是一个" 静默 "对象,仅用于实现某些依赖性.

记住这是'沉默 '的对象.

模拟积极参与测试执行

除此之外,没有进一步的区别 - 这肯定有其历史优点,但现在基本上是反直觉和学术性的,它是一种模糊测试驱动开发的真正重要概念.

关于MoqFakeItEasy之间的比较:从概念的角度来看,这两个框架大致相同 - 差异仅在API和术语中 ......

托马斯