我创建了一个使用AskGeo的API的PHP类。(http://askgeo.com(
我想用 PHP 对其进行测试,并将这些测试包含在我发布的 PSR 包中,但我不想泄露测试 API 所需的帐户 ID 和 API 密钥。
最好的方法是什么?
我想我可以包含一个配置文件,可以在运行测试之前使用这些凭据填充。
这是最好的方法吗?
好的单元测试必须是快速且可重复的。如果使测试使用远程 API,则会违反以下规则:
- HTTP 请求太长而无法执行 - 永远不知道多长时间,好的测试工作几毫秒
- 一旦客户互联网不稳定,测试结果可能会有所不同。没有互联网,测试根本无法进行。
你可以做的是将代码与逻辑和一些传输层分开。您应该将传输注入逻辑代码,以便能够使用真实传输(如 cUrl(进行生产,并使用模拟传输来测试 env。模拟传输应从您提供的灯具返回答案。这将使测试非常快,并且始终产生相同的结果。
传输层可能如下所示:
- 使用方法
request($url, $params, $method, ...)
TransportInterface
-
StubTransport implements TransportInterface
__construct($fixtures)
- 如果在灯具中找到$url+$params+$method,则返回结果。 -
CurlTransport implements TransportInterface
- cUrl 实现。 -
VoodooMagicTransport implements TransportInterface
- 使用一些黑魔法获得结果。
你逻辑编码:FantasticLogic
类与__construct(TransportInterface $transport)
.不要在参数类型中使用实现的类名,只使用接口。
在我看来,如果你真的想在每次测试运行时针对实时生产API进行测试,这是最好的方法 - 要求使用你的类的开发人员输入他们自己的凭据。但是,如果没有一组适当的凭据可用,则应考虑使用存根(呼叫的静态预设应答(。