首页 > 解决方案 > 模拟具有许多依赖项的嵌套服务类

问题描述

我有一堆服务类,看起来都差不多,或者类似的。

@Service
public class ServiceA {
   private RepositoryA repA;
   private RepositoryB repB;
   private DependencyC depC;
   private DependencyD depD;
   private ServiceB serviceB;

   @Autowired
   public ServiceA(RepositoryA repA, RepositoryB repB, DependencyC depC, DependencyD depD, ServiceB serviceB) {
        this.repA = repA;
        ....
   }
}

现在我想在我的测试类中使用这些服务而不启动 Spring。如果我在应用程序上下文中使用 bean,测试会花费很长时间。我想模拟服务类,但由于深度嵌套的结构,我不知道如何。最简单的方法是模拟 ServiceA 使用的所有存储库、依赖项和服务,并将它们自己注入到测试类中,但这似乎不对,因为我必须对 ServiceB 做同样的事情。

标签: javaspringmockito

解决方案


情侣选择:

  1. ServiceB也嘲笑
  2. 做你所描述的,因为无论如何你都会这样做以编写测试,ServiceB这样你就可以重用该工作
  3. 构建一个充满模拟的替代 Spring 上下文并将其用于测试

我通常选择 2。它不纯,因为 的正确性ServiceA取决于 的正确性ServiceB,但编写、管理和理解的测试代码较少。


推荐阅读