假设您的网站需要调用 Twitter API 来执行某些任务,您有多种选择:
- 只使用模拟
- 在单元测试中使用 mock,但在集成测试中使用生产 api
- 只调用生产api,从不使用mock
如果您的服务依赖于外部 api,哪一种是最好的方法?
假设您的网站需要调用 Twitter API 来执行某些任务,您有多种选择:
如果您的服务依赖于外部 api,哪一种是最好的方法?
我会退后一步,问问自己你想测试什么。
如果您尝试单独测试其他代码,请使用模拟(毕竟这是模拟的目的)。
如果您正在尝试真正进行端到端测试,请使用生产 API(或者如果有的话,使用实时测试 API)。
所以我的答案非常接近您的第二个选择,但需要注意的是您应该考虑是否需要测试来自第三方的 API。有时这样做是有意义的或必要的,有时是没有意义的(众所周知它们是可靠的,或者这样做非常不方便)。
我认为第二个是最好的解决方案。我在单元测试中使用模拟,在功能测试中使用生产 api。我不希望单元测试使用远程 api,因为我希望它们快速运行并且我没有测试该 api 的结果(和连接),但是如果 api 发生更改或者我有一个我希望我的 Jenkins 失败连接问题或其他
使用 Mock 的一个优点是用于“负面测试”,例如您的代码如何响应从 API 返回的某些错误条件。使用 Mock 可以测试 100% 的“可访问”代码,而使用真正的 API(尤其是组织外部提供的 API)会出现问题。