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