企业集成测试夹具设置

时间:2014-01-19 17:17:31

标签: java testing integration integration-testing

我正在尝试测试使用“企业集成模式(EIP)”编写的新在线购物系统中的组件。该组件会观察客户的购物行为,并在此过程中提出建议。

EIP的工作方式允许轻松编写这样的组件,但是我在为这个组件设置测试夹具时遇到了极大的困难。在该系统中,许多数据彼此具有某种逻辑连接,这要求它们一起变化。这转化为具有数百行设置的测试,这是不可维护的。

我现在正在评估三种解决方案:

1.为所有消息和响应对象创建自己的构建器:

目的: *根据一些变化隔离测试。 *允许更好的夹具代码重用。 (可以在构建器中设置一些默认值。)

优点/缺点:

每个测试仍然需要大量的代码来设置,但在很大程度上是面向未来的。数据一致性完全取决于程序员。

2.已连接的构建者:

基本上从解决方案1向构建器添加一些方法以填充彼此的字段。例如,订单构建器上可能有方法来生成搜索和页面视图历史记录。

目的: *进一步减少每次测试中的夹具设置量 *提高灯具的一致性

优点/缺点:

施工人员非常复杂,可能会成为他们自己的维护问题。

3.模拟与真实服务的互动

目的:类似于解决方案2

优点: *数据将更加真实和一致 *更容易设置精细的测试数据(例如页面查看历史记录)

缺点: *非常复杂且高度依赖外部 *用于描述/执行模拟操作的代码可能同样长 *运行缓慢

4.本地(重新)实施的服务

目的:

  • 通过在本地重新实现简单版本的服务来解决解决方案3中的外部依赖性
  • 通过推断最终结果中的操作,减少所需的测试代码数量(与解决方案3相比)(参见解决方案2)

优点/缺点: *比解决方案3更可靠,但需要大量实施

我的问题:

有更好的解决方案吗?如果没有,你会选择哪一个?此外,如果此处选择的方法将来会应用于所有其他服务,您会选择不同的方式吗?

1 个答案:

答案 0 :(得分:1)

根据我测试严重依赖数据的服务的经验,这里有一些建议:

  1. 绝对使用真实的数据,而不是测试数据。我想你已经提到过,手动模拟数据可能会非常痛苦,因为它经常变化并且可能很复杂/很大。

  2. 能够快速重新生成实际数据。编写一个工具来进行一次性数据转储并使用它并不困难,但理想情况下,当数据模型发生变化时,您可以轻松获取另一个数据快照并使用它。

  3. 避免复杂的代码。你已经涵盖了这一点。如果复杂性太大,没有人会保持测试的质量。

  4. 我暂时采用的方法是:

    1. 确保所有数据库调用/外部依赖项都位于接口后面。这允许您模拟数据。好像你有这个。

    2. 创建一个接口的特殊实现,它执行两项操作:a)进行实时数据库调用,b)将数据库调用的结果保存到JSON文件。

    3. 当您需要创建实际数据的快照时,可以从(2)中换出给定接口的生产实现。然后,您将完成一些用例并将JSON文件写入磁盘。

    4. 您的测试启动代码只需要从磁盘读取JSON并为对象加水。

    5. 这对我来说非常有用,因为它可以快速复制真实数据,并且在数据发生变化时很容易更新。

      显然有一些工作涉及,但所需的代码并不是非常复杂。