SpringBoot + Junit 踩坑:部分 Service 注入失败
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot + Junit 踩坑:部分 Service 注入失败相关的知识,希望对你有一定的参考价值。
SpringBoot + Junit 踩坑:部分 Service 注入失败
问题
- 测试类
JerryServiceImplTest
中的DemoService
可以自动注入。 - 但是
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 注入失败的主要内容,如果未能解决你的问题,请参考以下文章
黑马Java笔记+踩坑汇总JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城
如何使 junit 测试在 springboot 应用程序中使用嵌入式 mongoDB?
Spring Boot之集成Redis:Spring Cache + Redis
Tars | 第1篇 Win10下Docker部署TarsJava(SpringBoot)全过程及踩坑记录 #yyds干货盘点#