I'l*_*ack 5 php phpunit guzzle
我在服务类中创建了一些方法来使用 API POST 请求通过 Guzzle 连接到外部服务/提供者。
我喜欢使用 phpunit 进行测试 - 我应该在不连接到服务的情况下使用伪造的 HTTP Json 响应,还是应该连接到服务以获得服务的真实响应?
您应该模拟外部 API 调用。您的测试旨在测试您的代码而不是外部 API。
注意:最终,如果您确实在测试中使用外部 API,您可能会连接到 API 的测试版本(与生产环境将连接到的 API 的实时版本不同),因此您并不能真正确保无论如何,API 响应的一致性。
测试中的一个常见原则是“不要嘲笑你不拥有的东西”。模拟这些 API 调用会使您的测试不太可靠,并且会给您一种错误的安全感,因为您可能会收到误报。
例如,当 API 意外地引入重大更改时,您的测试将变为绿色,一旦部署到生产环境,您最终会注意到出现了问题。这可能就是您希望测试捕获的内容。
当您针对真实的 API 进行测试时,您会感受到可靠性。您的测试是否经常因服务中断或超时而失败?如果是这样,您可以引入重试机制、断路器等措施或将 API 调用与应用程序的其余部分解耦。
当您模拟 API 时,您只能知道代码的行为符合服务的(可能是过时的)规范。没关系,但不如依赖实际服务那么有用。
您可以做的是使用组来单独运行这些测试。这将使您可以轻松地从剩余测试中包含/排除这些可能缓慢且有时不稳定的测试。这也有助于绕过速率限制,例如仅在关键分支上运行这些测试。
| 归档时间: |
|
| 查看次数: |
1656 次 |
| 最近记录: |