如何测试外部服务?

时间:2016-05-26 21:10:01

标签: tdd integration-testing

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

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

我们非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

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

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

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

我想说最好的测试方法是按照它们有多好的降序排列:

创建测试数据并验证

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

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

验证已知数据

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

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

验证正确的操作

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

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

非功能测试

除了测试工作服务之外,您可能希望测试失败情况,例如服务中断或无法接收。您如何处理外部数据库中的故障?当数据库重新联机时,它是否会正常恢复?