如何模拟集成测试所需的许多依赖关系?嘲笑集成测试
我使用Mockito进行“纯粹”单元测试。在这种情况下,“纯粹”意味着测试一个类,嘲笑它的所有依赖。美丽。
现在来集成测试。让我们在这种情况下说的集成测试将测试是这样的:
- 消息放在一个队列
- 消息是“处理”
- 响应消息放在响应队列
我们还要说,步骤2中发生的处理是严重的事情。它依赖于大量的数据库交互,在多个外部服务,文件系统,各种事物上。流量也会触发很多副作用,所以我不能简单地确保响应是正确的 - 我需要验证副作用。
这些依赖关系中的每一个都由一个无状态的服务类包装,这使得它们很好,可以嘲弄。
人们如何处理?
我很乐意使用Mockito,以便我可以验证上述流程的副作用。然而,Mocktio的文档(在很大程度上是它的实现)似乎强烈反对在“纯粹”单元测试以外的环境中使用它。我试图走这条路线,但
- 这是很难填充存根数据(有很多很多的)
- 这是很难有春天注入的存根情况下进入我的豆子
- 很困难重置'模拟,以便我可以验证一组不同的交互而不清除存根。
编辑
我知道,我可以像一个HSQLDB实例处理数据库的问题,但仍然有对外服务的问题。对于可重复性,我不能依赖那些正在启动的服务,处于我需要的状态等。我在那里看到的唯一选择是嘲笑它们。
Whatdaya呢?
只是为了澄清,因为集成测试可以采取两种方式。这听起来像是你的意思是集成测试,测试连接组件可以很好地协同工作(主要是测试API)。但是,有时整合是指端到端,所以你不会嘲笑你的服务,并且实际上允许它访问数据库。这个澄清可以帮助答案..请参阅http://stackoverflow.com/questions/4904096/whats-the-difference-between-unit-functional-acceptance-and-integration-test为进一步澄清的类型 – 2012-04-12 21:06:57
它确实适用于需要大量外部依赖性的任何测试(集成或端到端)。例如,我可以用HSQLDB实例替换我的数据库存根,但我仍然拥有所有其他服务。将编辑的问题稍微澄清.. – 2012-04-13 01:06:47
那么你最终如何解决嘲讽问题? – Pupsik 2015-05-19 14:34:25