服务器之家

服务器之家 > 正文

解决Spring boot 整合Junit遇到的坑

时间:2021-12-16 11:00     来源/作者:阿龙Growing

这是我在使用springboot整合Junit的时候遇到的坑

1.在pom.xml中添加junit环境的依赖

?
1
2
3
4
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

2.在src/test/java下建立测试类

例:

?
1
2
3
4
5
6
7
8
9
10
@RunWith(value = SpringJUnit4ClassRunner.class)
 @SpringBootTest(classes={Demo.class})  // **注意:启动类为自己编写的(这是个坑)**
 public class serviceTest {
     @Autowired
     private serviceImpl serviceimpl;
     @Test
     public void testAdd() {
         this.serviceimpl.add();
     }
 }

3.自己编写的启动类

?
1
2
3
4
5
6
7
8
9
@SpringBootApplication
public class Demo {
public static void main(String[] args) {
    SpringApplication springApplication = new SpringApplication(Demo.class);
     // 这个是关闭springboot启动时候的图标可以不设置
    springApplication.setBannerMode(Banner.Mode.OFF);
    springApplication.run(args);
}
}

说明:

@RunWith:启动器 SpringJUnit4ClassRunner.class:让 junit 与 spring 环境进行整合

?
1
@SpringBootTest(classes={App.class})

1:当前类为 springBoot 的测试类

2:加载 SpringBoot 启动类(启动类为自己编写的启动类(这是个坑))。启动SpringBoot

SpringBoot 整合Junit测试注入Bean失败

java.lang.IllegalStateException: Failed to load ApplicationContext

问题描述

我是在springboot整合测试的时候报错的。运行就是报各种bean找不到。

版本:springboot-1.5.12 + junit4.12

这个问题卡了半天才解决。从网上搜了若干个博客都试了,基本上都没有用。

什么加@WebAppConfiguration这个注解啊,加那个注解的,全没用。

下面是我的测试类

11111

解决过程

我仔细观察了一下启动类,因为这个@SpringBootTest我是设置的启动类的。才发现原来注入的这些找不到的bean,实际上都是启动类当中使用依赖注入的对象。

以下是我的启动类

解决Spring boot 整合Junit遇到的坑

由此我推断,虽然springboot自带了扫描包(默认扫描规则就是启动类以上的子包),但是他可能是遵循java的由上而下执行代码规律,因为他毕竟是整合测试,他和直接从启动类启动项目是不一样的概念。在他要依赖注入这个对象的时候,而实际上这个对象并没有放到容器当中,这时候就会产生注入不成功。

最终在启动类添加了一个@ComponentScan(basePackages = {“com.xjgx”})扫描全包。成功解决!

在配置类上添加 @ComponentScan 注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 context:component-scan。

总结

springboot整合junit测试方法,实际上就这两个注解就可以了。

?
1
2
3
4
5
6
7
8
9
@RunWith(SpringRunner.class)
@SpringBootTest(classes = EhrApplication.class)
public class EhrApplicationTest {
    @Autowired
    HealthExamReSerivice healthExamReSerivice; 
    @Test
    public void contextLoads() {       
    }
}

假如启动类使用到了依赖注入对象,这个时候需要在启动类上添加扫描包。

?
1
@ComponentScan(basePackages = {"com.xjgx"})

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_43036122/article/details/85447439

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部