我尝试实施单元测试来只测试一个方法。我努力为我正在测试的方法所使用的依赖类和方法创建“模拟”类......以便在该方法中执行代码实际上不会调用单元中其他方法中的代码测试不应该是“测试”(这些方法还有其他单元测试)这样,单元测试的失败可靠地表明单元测试正在测试的方法失败......
模拟类旨在“模拟”依赖类的接口和行为,以便我正在测试的方法可以调用它们,并且它们将根据系统要求以标准、明确定义的方式运行。为了使这种方法有效,对此类依赖类及其方法的调用必须在定义良好的接口上进行,以便“测试器”进程可以将依赖类的 Mock 版本“注入”到正在测试的类中的实际生产版本...... 这有点像一种常见的设计模式,称为“依赖注入”或“控制反转”(IOC)
市场上有几种第三方工具可以帮助您实现这种模式。我听说过一种叫做“Rhino-Mock”或类似的东西......
编辑:罗布·威尔斯。@查尔斯。谢谢你。我忘记了使用模拟对象来完全替换使用除了被测对象之外的其他类。
在您提到模拟对象后,我还记得的其他几件事是:
- 它们可用于模拟包含的类返回的错误。
- 它们可用于引发特定异常以检查被测类中的异常处理。
- 它们可用于模拟设置成本高的项目,例如大型 SQL DB 后端。
- 它们可用于验证传入请求的内容。
有关更多信息,请查看 Martin Fowler 的论文“ Mocks Aren't Stubs ”和 The Pragmatic Programmers 的文章“ Mock Objects ”