我刚开始学习 Ruby on Rails。当我研究 RSpec 测试时,我看到了一个关于 RSpec Mocks 的推荐链接。但是我不知道 RSpec Mocks 的优点以及如何使用它。任何人都可以对此进行总结。
2 回答
rspec-mocks 是 rspec 的测试替身框架[ RSpec是用 Ruby 编写的用于测试 Ruby 代码的“领域特定语言”测试工具],支持生成的测试替身和真实对象的方法存根、伪造和消息期望.
rspec-mocks通过让您设置已知的返回值、方法的假实现,甚至设置对象接收特定消息的期望来帮助控制代码示例中的上下文。
模拟可帮助您保持测试干净。我建议从集成测试开始(例如黄瓜)。在那里你不使用模拟(除非可能像 WebMock 之类的东西,将你的应用程序与外部世界封装起来)。一旦您认识到代码变得复杂,您就开始使用 rspec 单元测试,您将编写该代码以使您的集成测试变得绿色。现在,您将您的模型与其他模型封装在一起,并将您的控制器与带有模拟的模型封装在一起。所以你要编写的代码,使 rspec 测试绿色,不依赖于其他东西。使用模拟,您只需指定所有相关内容的行为,它就会按照您定义的方式运行。当然,您仍然需要测试,这些其他东西是否真的能满足这些期望。但是,当稍后执行某些更改请求会破坏一个模型时——实际上只有该模型的测试会破坏。并且所有相关的东西仍然可以工作,因为模拟按照定义的方式运行。通过这种方式,您可以更轻松、更快地找到真正的问题。当然,另一个优点是,您可以处理更少的数据库轮询。
我通过 Rspec Book 学习了 Rspec 和 cucumber。它帮助我了解了模拟方法的优势。