温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何解决Spring boot整合Junit遇到的坑

发布时间:2021-09-03 13:18:55 来源:亿速云 阅读:199 作者:小新 栏目:开发技术

小编给大家分享一下如何解决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,实际上都是启动类当中使用依赖注入的对象。

    以下是我的启动类

    如何解决Spring boot整合Junit遇到的坑

    由此我推断,虽然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"})

    以上是“如何解决Spring boot整合Junit遇到的坑”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI