我的 Tornado 应用程序有一个处理程序,它使用 AsyncHTTPClient
调用另一个外部 API,然后返回。
如何编写一个单元测试来测试我的处理程序是否正确调用外部 API?
我觉得我应该在单元测试中运行第二个服务器,它模拟外部服务器并提供与我的处理程序所使用的相同的 API。我可以提供要点击的 URI 作为我的应用程序的参数,因此它不是硬编码的。但是我不确定如何在 AsyncHTTPTestCase
中(正确地)拉出 2 个服务器。
最佳答案
关于如何分解和正确处理测试,有很多意见。对于我正在测试必须与第三方对话的场景,在您的示例中,我会将其分成 3 个部分,一个非常薄的部分,仅与 API 对话。然后我会编写一个集成测试来测试与 API 对话的部分。然后我会制作一个模拟或其他测试装置来替换对 API 的调用并编写处理 API 调用的代码。这可以很容易地放入单元测试中,因为它通常类似于:
my_new_data = do_process(call_my_third_party_api())
只需传入第三方 API 调用返回的数据的模拟,您就可以轻松地为 do_process 编写测试。
然后,当需要测试您的处理程序时,您只需使用返回您期望从第三方获得的结果的内容来模拟您的 api 调用。
现在您有三个不同的测试来测试应用程序的每个区域。您可以运行测试来确保您的代码正确访问 API。第一个测试告诉您是否正确处理 API,第三个测试告诉您是否正确地将信息返回给最终用户。
关于python - 如何测试 Tornado 处理程序是否正确调用另一个 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40138891/