已关闭8年。
我偶然发现了这个开源项目Fake It Easy,它看起来非常有趣,但是我怀疑,FIE假货和Moq Mocks有什么区别?有没有一种更好的特定用途?
编辑:
这个新框架比Moq更好的是什么?
最佳答案
明确地说,我创建了FakeItEasy,所以我绝对不会说一个框架是否优于另一个框架,我所能做的是指出一些差异,并激发创建FakeItEasy的原因。 Moq和FakeItEasy在功能上没有主要区别。
FakeItEasy没有断言,但没有“可验证”或“期望”,但是始终在测试结束时明确声明这些断言,我相信这会使测试更易于阅读和理解。它还可以帮助初学者避免多个断言(他们会在许多调用或模拟对象上设定期望值)。
我以前使用过Rhino Mocks,我非常喜欢它,尤其是在引入AAA语法之后,我确实更喜欢Moq的流畅API。我不喜欢Moq的是“模拟对象”,您必须在其中使用模拟。对象,我更喜欢带有“自然”模拟的Rhino方法。每个实例看起来和感觉都像是伪造类型的普通实例。我想要两全其美,也想看看当我拥有完全自由的双手时该如何处理语法。我个人(显然)认为我创造了一种既可以融合两个世界的优点又可以融合在一起的东西,但是当您站在巨人的肩膀上时,这很容易。
正如这里已经提到的,主要区别之一是术语,FakeItEasy最初是为了向初学者介绍TDD和模拟而创建的,而不必担心模拟和存根之间的差异(您在Rhino中的方式)是我认为不是很有用。
我已经将很多注意力放在异常消息上,仅在查看异常消息时就很容易分辨出测试中什么时候出错。
FakeItEasy具有其他框架所没有的一些可扩展性功能,但是这些文档还没有得到很好的记录。
(希望)在具有构造函数参数的模拟类中,FakeItEasy更强一点,因为它具有解析要使用的伪值的机制。您甚至可以通过在测试项目中实现DummyDefinition(Of T)类来指定自己的伪值定义,FakeItEasy将自动选择该类。
语法是一个明显的区别,哪个更好在很大程度上取决于口味。
我敢肯定,现在我还有很多其他的差异需要忘记(为了公平起见,我自己从未在生产中使用过Moq,因此我对此的了解有限),但我确实认为这些是最重要的差异。