【问题标题】:How to test external services?如何测试外部服务?
【发布时间】:2016-05-26 21:10:01
【问题描述】:

我们有一个应用程序,它在处理一些数据时必须从不属于我们的应用程序(即外部应用程序)的数据库中查询数据。我们把这个查询逻辑放在一个外部服务项目中,主应用程序通过 http 调用这个外部服务。对于主应用程序的集成测试,我们模拟了这个 Http 服务的回复。

我想知道是否有人可以建议测试此外部服务的最佳方法,其中需要测试映射逻辑和查询逻辑等内容。该服务基本上只是查询外部数据库并将结果发回。我们已经写了sql语句来获取数据,没有使用实体框架。

任何建议将不胜感激。

【问题讨论】:

    标签: tdd integration-testing


    【解决方案1】:

    在测试外部服务时,如果该服务具有可重复的行为会很有帮助。

    例如,如果您可以说对外部服务的特定查询将始终返回相同的可预测结果,那么您可以为此编写测试。

    这并不总是可行的,因为您并不总是能够控制外部数据库包含的数据。

    我会说最好的测试方法是按照它们的好坏程度降序排列的:

    创建测试数据并验证

    理想的方法是您的测试可以创建一些新的测试数据,然后运行服务以确认数据按预期返回。最后,它将通过删除创建的测试数据进行整理。

    这种方法的好处是您可以更加确信外部更改不会破坏测试。您还可以通过插入适当的数据来测试服务的特定功能。

    验证已知数据

    如果外部服务不允许创建数据,则下一个最佳方法是测试您知道始终正确的结果。例如,如果您的服务正在进行身份验证,那么您将使用您知道服务上存在且不会更改的帐户进行检查。

    这种方法依赖于不变的特定数据。在身份验证示例中,始终存在更改您用于测试的帐户的密码的风险,因此您的测试将失败。

    验证正确的操作

    最差的解决方案是简单地使用有效参数调用服务并确保不返回错误代码。

    您可以确认服务已启动并正常工作,但您对返回的数据的有效性没有信心。

    非功能测试

    除了测试工作服务之外,您还可能希望测试失败案例,例如服务关闭或无法联系。您如何处理外部数据库中的故障?数据库重新上线后是否正常恢复?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多