最近,围绕.NET世界中所有不同的模拟框架进行了大量宣传.我还没有完全掌握它们的优点.编写我自己需要的模拟对象似乎并不难.特别是在Visual Studio的帮助下,我可以快速编写一个实现我想要模拟的接口的类(它为我自动生成几乎所有内容),然后为我的测试编写一个实现方法.完成!为什么要经历一个理解模拟框架的麻烦,其唯一目的是保存几行代码.或者是一个模拟框架,不仅仅是关于保存代码行?
一旦我终于掌握了模拟对象,我意识到它们对于单元测试至关重要,原因与双盲测试或对照组对于科学试验至关重要:它们隔离了您实际测试的内容.
如果您正在测试一个通过其他接口进行相当多交互的类,那么您不仅可以保存代码行,还必须模拟每个接口,但您还可以执行以下操作:如果不按顺序调用这些方法,则意外的方法称为"或"异常.你可以通过模拟框架获得非常复杂的功能,虽然我很快就会承认它有一个很大的学习曲线,当你加快速度时它们会帮助你进行更彻底的单元测试而不会臃肿.
实际上,您确定了问题中模拟框架的关键点之一.您自己编写模拟代码的事实不是开发人员应该关注的事情.模拟框架以编程方式为您提供接口实现,并且它们是可用的(基于您的模拟设置).
例如,如果您正在测试ICustomerDAO,您会怎么做?并且您想要测试一些方法14次,每种方法有不同的结果?手动实现14个不同的类?我怀疑有人会想那样做.
当你不关心它们是否会真正起作用时,Mocks可以让你有能力定义你的类的部分会发生什么,比如你想要它们时抛出异常,返回零结果并确保你正确处理它等等...
它们是一个很好的单元测试工具.
以前的问题可能会有所帮助:
什么是模拟,什么时候应该使用它?
Mockist与经典TDD
我发现使用模拟框架可以让我更快地生成测试,并且可以更好地验证我期望在测试中发生的实际情况.我过去曾经实施过存根或假货.我发现我需要生成特定于我想要的测试的存根,这需要花费很多时间.我可以使用模拟框架更快地创建相同的测试.好的支持使用简单的语法生成假货,存根或模拟.
它需要一段时间才能掌握它,我暂时避免它,但现在不会因为@Chamelaeon声明的原因而没有模拟框架.