【发布时间】:2014-02-08 19:02:58
【问题描述】:
我正在尝试在使用“企业集成模式 (EIP)”编写的新在线购物系统中测试一个组件。该组件观察客户的购物行为并在此过程中提出建议。
EIP 的工作方式允许轻松编写此类组件,但我在为该组件设置测试夹具时遇到了极大的困难。在这个系统中,很多数据之间都有一定的逻辑联系,这需要它们一起变化。这转化为具有数百行设置的测试,这是不可维护的。
我现在正在评估三种解决方案:
1.为所有消息和响应对象创建我们自己的构建器:
目的: * 将测试与一些变化隔离开来。 * 允许更好的夹具代码重用。 (可以在构建器中设置一些默认值。)
优点/缺点:
每个测试仍需要大量代码来设置,但在很大程度上是面向未来的。数据一致性完全取决于程序员。
2.连接的建设者:
基本上从解决方案 1 向构建器添加一些方法来填充彼此的字段。例如,订单生成器上可能有生成搜索和页面查看历史记录的方法。
目的: * 进一步减少每次测试中的夹具设置量 * 提高灯具的一致性
优点/缺点:
构建器非常复杂,可能会成为他们自己的维护问题。
3. 模拟与真实服务的交互
目的:类似于方案2
优点: * 数据会更加真实和一致 * 更容易设置详细的测试数据(例如页面浏览历史)
缺点: * 非常复杂且高度依赖外部 * 用于描述/执行模拟操作的代码可能一样长 * 运行缓慢
4.本地(重新)实现的服务
目的:
- 通过在本地重新实现简单版本的服务来解决解决方案 3 中的外部依赖性
- 通过从最终结果推断操作来减少所需的测试代码数量(与解决方案 3 相比)(参见解决方案 2)
优点/缺点: * 比方案 3 更可靠,但需要大量实现
我的问题:
有更好的解决方案吗?如果不是,你会选择哪一个?另外,如果这里选择的方法将来应用于所有其他服务,您会选择不同的方法吗?
【问题讨论】:
标签: java testing integration integration-testing