解决Spring boot 整合Junit遇到的坑

 更新时间:2021年09月03日 08:57:39   作者:阿龙Growing  
这篇文章主要介绍了解决Spring boot 整合Junit遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

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

例:

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

3.自己编写的启动类

@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 环境进行整合

@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,实际上都是启动类当中使用依赖注入的对象。

以下是我的启动类

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

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

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

总结

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

@RunWith(SpringRunner.class)
@SpringBootTest(classes = EhrApplication.class)
public class EhrApplicationTest {
	@Autowired
	HealthExamReSerivice healthExamReSerivice;	
	@Test
	public void contextLoads() {		
	}
}

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

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

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

相关文章

  • 基于Gradle搭建Spring 5.3.13-release源码阅读环境的详细流程

    基于Gradle搭建Spring 5.3.13-release源码阅读环境的详细流程

    这篇文章主要介绍了基于Gradle搭建Spring 5.3.13-release源码阅读环境,首先安装jdk、gradle等一系列必要操作,本文通过实例代码相结合给大家讲解的非常详细,需要的朋友可以参考下
    2022-04-04
  • JAVA 时间区间的字符串合法性验证

    JAVA 时间区间的字符串合法性验证

    需要对获得的诸如08:30-11:00这样的字符串进行合法性验证,判定表示的时间区间是否合法,以及对高峰期时间的区间是否在总的时间区间内部进行判断。
    2013-03-03
  • java web如何解决瞬间高并发

    java web如何解决瞬间高并发

    这篇文章主要为大家详细介绍了java web解决瞬间高并发的策略,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Java中输出字符的ASCII值实例

    Java中输出字符的ASCII值实例

    这篇文章主要介绍了Java中输出字符的ASCII值实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • springboot3.x版本集成log4j遇到Logging system failed to initialize using configuration from‘classpath:log4问题

    springboot3.x版本集成log4j遇到Logging system failed to initial

    使用Springboot 3.x集成Log4j时可能会遇到版本冲突的问题,这通常可以通过检查Maven依赖树来识别,一旦发现冲突,将Log4j的版本统一更新到最新的兼容版本,例如2.21.1,即可解决问题,此方法有效解决了日志打印错误,是处理类似问题的一个实用参考
    2024-09-09
  • Spring Boot Logback配置日志过程解析

    Spring Boot Logback配置日志过程解析

    这篇文章主要介绍了Spring Boot Logback配置日志过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • java实现表格tr拖动的实例(分享)

    java实现表格tr拖动的实例(分享)

    下面小编就为大家分享一篇java实现表格tr拖动的实例。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Spring Boot面试题总结

    Spring Boot面试题总结

    这篇文章主要介绍了Spring Boot面试题总结,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Java集合Set的简单使用解析

    Java集合Set的简单使用解析

    这篇文章主要介绍了Java集合Set的简单使用解析,Set接口是Collection的子接口,Set接口相较于Collection接口没有提供额外的方法,Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败,需要的朋友可以参考下
    2023-11-11
  • Mybatis打印SQL语句的几种常用方式

    Mybatis打印SQL语句的几种常用方式

    当我们动态sql拼接的块很多的时候,我们要想从*mapper.xml中直接找出完整的sql就会非常的难,这个时候经常会需要把组合之后的完整SQL语句打印出来,对调试非常有帮助的,所以本文小编给大家介绍了几种Mybatis打印SQL语句的常用方式,需要的朋友可以参考下
    2023-11-11

最新评论