8

我前一段时间写了一个测试,测试我在代码和第三方API之间编写的集成。测试确保整合工作正常,并且我们获得预期的结果。如何测试与第三方API的连接适合持续集成?

今天正式构建失败,因为测试在尝试连接到第三方API时收到500错误。

测试这种情况有意义吗?

+0

没有它,你的正式版本会完全正常工作吗?如果不是,那么是的,测试它。测试一切。墨菲是真实的(和整数)。他*爱*代码。 – 2011-02-18 18:17:18

回答

8

在我看来,如果第三方(db,webservice等)不可用,集成测试可以失败。如果你不想测试集成本身,只是简单的功能,你可以嘲笑你的API的结果和测试他们。在这种情况下,您的测试不再取决于第三方的可用性。

我通常会根据第三方可用性以及“集成”等组属性标记单元测试,并将它们排除在持续集成过程之外。相反,我让他们在夜间生成运行。集成测试的时间和价格通常都很高,并且whole point of continuous integration is to provide rapid feedback

2

不,对于您的测试套件在第三方服务关闭时失败没有帮助。但是您确实想要全面测试与服务的整合。以下战略工作很适合我:

  • 模块中隔离第三方服务(比方说,一个班级,但却语言进行模块化是罚款),它确实尽可能少的,除了封装到连接服务。在类上编写方法,以便可以区分服务错误和错误是您的错误。例如,将服务关闭异常提供给一个通用的超类。

  • 服务类的编写单元测试,这样

    • 如果出现服务下降误差,测试通过,但记录错误。

    • 如果发生任何其他错误,照常失败。

    编写这些测试,以便它们针对实时服务运行。应该有少量的这些测试,所以它们不应该为测试套件运行时创建一个问题。

  • 将所有其他测试(包括集成测试)中的服务类别存根或模拟出来。 (通过这里的“集成测试”,我正在谈论的是测试您自己代码的所有层次的测试,而不是测试他们是否与第三方服务交互。)

    当在集成测试中对服务类进行存根或模拟时,不要存根或模拟服务类的公共API,而是存根或模拟一些较低级别,或许是用于连接到服务的服务类或库的内部方法。这可以防止调用服务类时的集成错误。在单元测试中,像任何类一样存根或模拟服务类的公共API。

正如马丁Buberl暗示,它可能是有帮助的集成测试,其中服务类没有存根或嘲笑了一个单独的试运行。说实话,这已经在我参与过的多个项目中讨论过了,但我认为这一切都没有完成。当第三方服务失败时,我们总是从生产错误(由监控或客户支持部门报告)中发现它,然后再通过测试了解它。