如何模拟集成测试所需的众多依赖项?
我在我的“纯”单元测试中使用Mockito。在这种情况下,“纯”意味着测试一个单独的类,以模拟其所有依赖项。现在来看看集成测试。假设在这种情况下,集成测试将测试以下内容:
1. 将消息放入队列中 2. 处理消息 3. 将响应消息放入响应队列
让我们还假设,在步骤2中发生的处理是非常重要的事情。它依赖于大量的数据库交互、多个外部服务、文件系统等等。此外,流程将触发许多副作用,因此我不能仅仅确保响应是正确的-我需要验证副作用。
每个依赖项都由一个单一的无状态服务类包装,这使它们易于进行模拟。
人们如何处理这种情况?
我很想使用Mockito,以便能够验证上述流程的副作用。然而,Mocktio的文档(在很大程度上也是其实现)似乎强烈反对在除“纯”单元测试以外的上下文中使用它。我尝试过这种方法,但是:
1. 很难填充存根数据(因为有很多数据) 2. 很难让Spring将这些存根实例注入到我的bean中 3. 很难“重置”模拟,以便我可以验证不同的交互集而不清除存根。
编辑
我知道我可以使用类似于HSQLDB实例之类的东西来处理数据库问题,但仍然存在外部服务的问题。为了重复性,我无法指望这些服务处于运行状态,处于我需要的状态等等。我唯一看到的选择是模拟它们。
你会怎么做?
我在我的“纯”单元测试中使用Mockito。在这种情况下,“纯”意味着测试一个单独的类,以模拟其所有依赖项。现在来看看集成测试。假设在这种情况下,集成测试将测试以下内容:
1. 将消息放入队列中 2. 处理消息 3. 将响应消息放入响应队列
让我们还假设,在步骤2中发生的处理是非常重要的事情。它依赖于大量的数据库交互、多个外部服务、文件系统等等。此外,流程将触发许多副作用,因此我不能仅仅确保响应是正确的-我需要验证副作用。
每个依赖项都由一个单一的无状态服务类包装,这使它们易于进行模拟。
人们如何处理这种情况?
我很想使用Mockito,以便能够验证上述流程的副作用。然而,Mocktio的文档(在很大程度上也是其实现)似乎强烈反对在除“纯”单元测试以外的上下文中使用它。我尝试过这种方法,但是:
1. 很难填充存根数据(因为有很多数据) 2. 很难让Spring将这些存根实例注入到我的bean中 3. 很难“重置”模拟,以便我可以验证不同的交互集而不清除存根。
编辑
我知道我可以使用类似于HSQLDB实例之类的东西来处理数据库问题,但仍然存在外部服务的问题。为了重复性,我无法指望这些服务处于运行状态,处于我需要的状态等等。我唯一看到的选择是模拟它们。
你会怎么做?