我们需要使用外部合作伙伴的API。该API状态良好,我们已经获得了一个沙箱环境,可以用于自动测试。
我们已经使用单元测试测试了每个外部API调用,但对于涉及外部合作伙伴一侧的复杂操作的集成测试最佳实践还不确定。
例如:我们服务的每个用户在我们的外部合作伙伴那里也有一个用户对象。当对该用户对象执行外部API调用X时,我们希望此用户的Z集合中出现Y对象(我们必须使用不同的调用进行查询)。
这种情况下的最佳测试实践是什么?
尽可能模拟外部API请求 并依赖于单元测试来完成工作?优点:测试运行速度快,不受互联网连接的影响。缺点:我们的模拟错误可能导致误报。
集成外部API沙箱 并针对其运行每个集成测试。优点:接近实际的API交互。缺点:测试只能在开放的互联网连接下运行,并且需要更长时间。
使用混合方法使用模拟和沙箱数据,设置一个布尔值以在需要时在内部(=模拟)和外部(=沙箱)环境之间切换。优点:可靠的测试。缺点:可能很难设置。
其他最佳实践?
谢谢!
相关:如何编写与外部API交互的集成测试? 但是,答案“您不会。您必须实际相信实际的API确实有效。”在我们看来是不足够的。
[编辑] 我们担心只针对我们对外部API的工作方式的假设进行集成测试(即使它们基于单元测试)-而不是针对实际API-将给我们留下错误的正面结果。我们需要的是一种测试,验证我们的假设(模拟)是否正确 - 不仅在单元测试的情况下,而且在涉及多个步骤的复杂操作的情况下。
验证可能是一个很好的例子:如果我们搞砸了集成代码并发送畸形数据或者在我们发送数据时上下文中没有任何意义的数据,因为我们错过了某个步骤,那么怎么办?我们的模拟API不会验证(或只在非常有限的范围内验证),仍然会返回有效数据,而不是传递我们从真正的API收到的错误。