2017-05-04 96 views
0

我有一个Rails应用程序,它与依赖位于远程数据库中的外部数据的外部api(Salesforce)进行交互。我写了一个包装这个代码的包装器,以便用户可以调用get_by_id(id)而不是编写相应的sql查询。各种集成的Rails测试

我想测试这段代码,我不知道该如何去做。我是否应该为测试敲击Salesforce后端数据库,调用真正的方法?或者我应该嘲笑方法调用的结果?我永远被我应该测试的东西所困惑......

回答

1

您应该像Salesforce的交互一样写套件。

测试的一个基本原则是,你的测试不应该因为外部因素而失败。但是,您的应用应该能够从SalesForce的错误中恢复。

Rails 4 Test Prescriptions

不幸的是,与第三方Web服务交互引入了 很多复杂的,以我们的测试。连接到Web服务的速度是慢的,甚至比我们已经尝试的 避免的数据库连接慢。此外,连接到Web服务需要互联网 连接...某些外部服务是公开的 - 我们不希望每次运行测试时都向Twitter发布更新,更不用说向PayPal发布信用卡付款。

此外,书中有一些准则,

一个假服务器,它在测试期间截取的HTTP请求和 返回一个罐头响应对象。我们将使用VCR gem ... *一个 适配器,该对象位于客户端和服务器之间以调解它们之间的访问。

烟雾测试,从客户端一直到真正的服务器......对整个交互进行全面的端到端测试。我们不想 想要经常这样做,因为前面列出的所有原因,但它的 有用,能够防范服务器API中的更改。

集成测试,从客户端到假服务器。 这测试我们应用程序的整个端到端功能,但 使用来自服务器的存根响应。

客户端单元测试,它在客户端启动,并在 适配器中结束。适配器的响应被扼杀,这意味着适配器 甚至没有伪造服务器调用。这使我们能够单独测试我们的 客户端与服务器API完全分离。

适配器单元测试,该适配器单元测试在适配器中启动,并在 假服务器中结束。这些测试是链条的最后一块,让我们 验证适配器从任何客户端或 实际的服务器

顺便说单独的行为,我认为这本书是一个必须具备