SpringBoot + Junit 踩坑:部分 Service 注入失败

Posted 笑虾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot + Junit 踩坑:部分 Service 注入失败相关的知识,希望对你有一定的参考价值。

SpringBoot + Junit 踩坑:部分 Service 注入失败

问题

  1. 测试类 JerryServiceImplTest 中的 DemoService 可以自动注入。
  2. 但是 DemoService 中依赖的其他 service 却没法自动注入。

分析

最开始单独测试 DemoService 为了加快效率,就没启动 Spring
而是直接在 setUp() 来初始化,因为开始时单测它的一些逻辑,没有别的依赖,这时是OK的。

public class JerryServiceImplTest 
    @Autowired
    private DemoService demoService;

    @Before
    public void setUp() throws Exception 
        demoService = new DemoServiceImpl(); // 这里就是坑
    

    @Test
    public void printTest() throws Exception 
        demoService.print("9527");
    

后来需要依赖其他的 service 了,就加上了启动 Spring 的相关注解。
然后就发现 DemoService 注入成功,但 DemoService 中依赖的几个service 始终注入失败。。。

@SpringBootTest
@RunWith(SpringRunner.class)
@ActiveProfiles("prod")
public class JerryServiceImplTest 
    
    @Autowired
    private DemoService demoService;
    
    @Before
    public void setUp() throws Exception 
        demoService = new DemoServiceImpl(); // 这里就是坑
    

    @Test
    public void printTest() throws Exception 
        demoService.print("9527");
    

其实很简单,也是因为连续跟BUG做斗争被搞的懵逼了。
因为setUp()中初始化代码的存在,所以始终用的是自己 new 出来的那个DemoService ,没有从Spring容器中取 DemoService ,所以才会出现了奇怪的注入问题。

@SpringBootTest
@RunWith(SpringRunner.class)
@ActiveProfiles("prod")
public class JerryServiceImplTest 
    
    @Autowired
    private DemoService demoService;

    @Test
    public void printTest() throws Exception 
        demoService.print("9527");
    

以上是关于SpringBoot + Junit 踩坑:部分 Service 注入失败的主要内容,如果未能解决你的问题,请参考以下文章

springboot整合jsp踩坑

(超详解)SpringBoot初级部分-整合其他框架-04

黑马Java笔记+踩坑汇总JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城

如何使 junit 测试在 springboot 应用程序中使用嵌入式 mongoDB?

Spring Boot之集成Redis:Spring Cache + Redis

Tars | 第1篇 Win10下Docker部署TarsJava(SpringBoot)全过程及踩坑记录 #yyds干货盘点#