我在服务类中创建了一些方法,使用API POST请求通过Guzzle连接到外部服务/提供程序。
我喜欢使用phpunit进行测试 - 我应该使用假的HTTP Json响应而不连接服务,还是应该连接到服务以获得服务的真实响应?
答案 0 :(得分:3)
测试的一个共同原则是“不要嘲笑你不拥有的东西”#34;。模拟这些API调用会使您的测试不太可靠,并且会给您一种虚假的安全感,因为您可能会得到误报。
例如,当API意外地引入了重大更改时,您的测试将变为绿色,一旦您部署到生产环境,您将最终发现出现问题。这可能是您希望测试捕获的内容。
当您针对真实API进行测试时,您将获得可靠性。由于服务中断或超时,您的测试是否经常失败?如果是这样,您可以引入测试,例如重试机制,断路器或将API调用与应用程序的其余部分分离。
当您模拟API时,您可以告诉您的代码是根据服务的(可能过时的)规范行事。没关系,但不如依赖实际服务那么有用。
您可以使用组来分别运行这些测试。这样可以很容易地从剩余的测试中包含/排除这些可能很慢且有时不稳定的测试。这也有助于限制速率,例如只在关键分支上运行这些测试。
答案 1 :(得分:0)
您应该模拟外部API调用。您的测试旨在测试您的代码,而不是外部API。
注意:最终,如果您确实在测试中使用了外部API,则很可能会连接到该API的测试版本(不同于您的生产环境将连接到的实时版本的API),因此您不会确实可以确保API响应的一致性。