我有一个与外部api(Salesforce)交互的rails应用程序,它依赖于位于远程数据库中的外部数据。我编写了一个包装此代码的包装器,以便用户只需调用get_by_id(id)
而不是编写相应的sql查询。
我想测试这段代码,我不确定应该怎么做。我应该在Salesforce后端数据库中进行测试,调用真正的方法吗?或者我应该只是模拟方法调用的结果?我对我应该测试的内容感到困惑......
答案 0 :(得分:1)
您应该像Salesforce的交互一样编写套件。
测试的基本原则是,您的测试不应因外部因素而失败。但是,您的应用应该能够从SalesForce的错误中恢复。
不幸的是,与第三方Web服务交互引入了一个 我们的测试很复杂。连接到Web服务是 比我们已经尝试过的数据库连接慢得多 避免。此外,与Web服务的连接需要Internet 连接...一些外部服务是公开的 - 我们不希望每次运行测试时都向Twitter发布更新,更不用说将信用卡付款发布到PayPal。
此外,本书还有一些指导原则,
虚假服务器,在测试期间拦截HTTP请求 返回一个预设的响应对象。我们将使用VCR宝石...... * An 适配器,它是位于客户端和客户端之间的对象 服务器调解它们之间的访问。
冒烟测试,从客户端一直到真实服务器......对整个交互的完整端到端测试。我们没有 由于前面列出的所有原因,我想经常这样做,但事实并非如此 有助于防止服务器API的更改。
集成测试,从客户端到虚假服务器。 这测试了我们应用程序的整个端到端功能,但是 使用来自服务器的存根响应。
客户端单元测试,从客户端开始并以 适配器。适配器的响应是存根的,这意味着适配器 甚至没有伪造服务器电话。这允许我们对我们进行单元测试 客户端完全独立于服务器API。
适配器单元测试,它在适配器中启动并以 假的服务器。这些测试是链条的最后一部分,并允许我们 验证适配器的行为与任何客户端或 实际的服务器
顺便说一下,我觉得这本书是必备的