我会保持简短,我有一个与其他应用程序通信的 Rails 应用程序,一些使用 SOAP(当然是非 Rails 应用程序...),其他使用 REST。我正在进行集成测试以确保我的端点包装器类具有正确的映射和设置。但是,它们默认由 rake test
执行,这使得它变得缓慢且脆弱。我希望经常运行单元测试并仅“按需”进行集成测试。你是怎么做到的?
您对此类集成测试有何偏好?
- 您的单元测试和/或模拟有多深?
- 您是否在 stub 中复制整个 SOAP 或 REST xml 响应?
- 您是否创建“外部端点”集成测试?
更新问题:如何在运行 rake test
时排除测试目录?
最佳答案
如果您遵循 Rspec/Cucumber 人员的建议,那么集成测试级别是模拟您的数据的不合适位置,因为在某些方面,它违背了集成/验收测试的目的。但是,您必须模拟 paypal 交易之类的东西,对吗?在我目前的项目中,我面临很多这样的问题,以下是我正在实现的一些解决方案:
- 标记在某些情况下不起作用的测试。在我的例子中,很多服务器都在防火墙后面,所以如果我在家不使用 vpn,我的测试就不会通过。因此,在 cucumber 中,我可以将它们标记为@firewall 并告诉它运行未标记防火墙的测试。我很确定 Rspec 2.0 也支持此功能。
模拟服务请求。是的,这可能是个坏主意,但我不知道如何以任何可预测的方式去做。我有一个单独的测试套件来确认服务正在运行,并且从我的 Rails 应用程序,我假设它们工作正常。这方面的一个例子是 LDAP。是的,在这些情况下,我倾向于使用真实的响应并做类似的事情。
response = double('response') ; response.expects(:data).and_returns('这里是我的 xml')
我确实认为,无论系统有多复杂,端点测试都非常重要。我真的很喜欢 Cucumber,它为我提供了 95% 的功能测试,所以我最终减少了这些测试的编写,而编写了更多的整个工作流测试。
关于ruby-on-rails - 我的 Rails 应用程序外部端点的集成测试的良好做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556106/