运行 注入代码的集成测试库的正确方法是什么?
What's the proper way of integration testing libraries that run injected code?
我有两个软件组件:我的应用程序和应用程序使用的库(归我公司所有,但属于另一个团队)。该库是某些服务的客户端库,并执行 HTTP 请求。该库还将 HTTP 响应映射到应用程序的内部表示。这是通过应用程序将映射 class 注入库来完成的。
我已经对映射 class 和应用程序进行了单元测试,而客户端库调用总是被模拟。
现在我正在考虑对库进行集成测试,但我不确定最好的方法是什么:
模拟库调用,只检查它是否使用正确的参数调用
- 专业人士:如果库的内部结构发生变化(具有非破坏性变化),我不必调整我的测试。
- 缺点:映射 class 未经过集成测试。我无法确定库是否已正确配置或映射器从库中获取的参数是否符合我的预期。
仅模拟库完成的 HTTP 调用
- 亲:映射class和库的配置(如果我配置正确的话)已经过测试。
- 缺点:我需要弄清楚库的内部结构并检查每个测试用例的 HTTP 调用是什么样子的。此外,如果库升级到新版本的服务,我也需要调整所有 HTTP 模拟,实际上不应该关心库的内部工作方式。
在测试期间用内存中的假(=dummy)实现替换库中的 HTTP 调用
- 专业:一切都经过测试+测试对库更改具有弹性。
- 缺点:这是实施和维护虚假实施的努力。根据服务的不同,这可能意味着在库中重建服务的功能。谁应该为假策略负责(实施+维护)?我的团队或拥有库的团队?
我赞成最后一点,但考虑到我们库的内部结构很少更改,我不确定是否值得为此付出努力。
你对此有何看法?你能想到另一个解决方案吗?
我会在库中创建帮助程序,允许您模拟 HTTP 响应。因此,您会在库中看到代码 运行,您可以使用验证 JSON 格式的库来确保 http request/response 是您所期望的。
从这个意义上说,您正在检查 i) 该库是否确实适用于您的系统; ii) 处理正确的 HTTP 响应;因此,您的助手可以很简单,开发人员只需要提供 http 响应的内容
我有两个软件组件:我的应用程序和应用程序使用的库(归我公司所有,但属于另一个团队)。该库是某些服务的客户端库,并执行 HTTP 请求。该库还将 HTTP 响应映射到应用程序的内部表示。这是通过应用程序将映射 class 注入库来完成的。
我已经对映射 class 和应用程序进行了单元测试,而客户端库调用总是被模拟。
现在我正在考虑对库进行集成测试,但我不确定最好的方法是什么:
模拟库调用,只检查它是否使用正确的参数调用
- 专业人士:如果库的内部结构发生变化(具有非破坏性变化),我不必调整我的测试。
- 缺点:映射 class 未经过集成测试。我无法确定库是否已正确配置或映射器从库中获取的参数是否符合我的预期。
仅模拟库完成的 HTTP 调用
- 亲:映射class和库的配置(如果我配置正确的话)已经过测试。
- 缺点:我需要弄清楚库的内部结构并检查每个测试用例的 HTTP 调用是什么样子的。此外,如果库升级到新版本的服务,我也需要调整所有 HTTP 模拟,实际上不应该关心库的内部工作方式。
在测试期间用内存中的假(=dummy)实现替换库中的 HTTP 调用
- 专业:一切都经过测试+测试对库更改具有弹性。
- 缺点:这是实施和维护虚假实施的努力。根据服务的不同,这可能意味着在库中重建服务的功能。谁应该为假策略负责(实施+维护)?我的团队或拥有库的团队?
我赞成最后一点,但考虑到我们库的内部结构很少更改,我不确定是否值得为此付出努力。
你对此有何看法?你能想到另一个解决方案吗?
我会在库中创建帮助程序,允许您模拟 HTTP 响应。因此,您会在库中看到代码 运行,您可以使用验证 JSON 格式的库来确保 http request/response 是您所期望的。
从这个意义上说,您正在检查 i) 该库是否确实适用于您的系统; ii) 处理正确的 HTTP 响应;因此,您的助手可以很简单,开发人员只需要提供 http 响应的内容