springBoot Junit测试用例出现@Autowired不生效的解决
作者:近藤 发布时间:2023-01-24 12:57:59
springBoot Junit测试用例出现@Autowired不生效
前提条件:
1,测试类上面添加支持的注解
就能取到spring中的容器的实例,如果配置了@Autowired那么就自动将对象注入。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)//这里Application是启动类
pom文件添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.25.RELEASE</version>
<scope>compile</scope>
</dependency>
2,出现错误
java.lang.NoSuchMethodError: org.springframework.util.Assert.state(ZLjava/util/function/Supplier;)V
这种错误的出现一般都是jar包冲突,这里是将spring-test的版本号由5.1.11版本换成了4.3.25解决了(可参考比较spring-context的版本),当重复引用时也会提示错误,所以引入时需要注意!
3,注解解释
@runWith注解作用:
– @RunWith就是一个运行器
– @RunWith(JUnit4.class)就是指用JUnit4来运行
– @RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环 境,以便在测试开始的时候自动创建Spring的应用上下文
– @RunWith(Suite.class)的话就是一套测试集合
SpringTest与JUnit等其他测试框架结合起来,提供了便捷高效的测试手段。而SpringBootTest 是在SpringTest之上的再次封装,增加了切片测试,增强了mock能力。
4,junit测试如何在idea上通过类中方法直接生成测试用例
第一步
从插件资源库中搜索JunitGenerator V2.0插件并安装
第二步
配置测试用例的生成目录
1.打开File->Settings
2.搜索junit,找到JUnit Generator
3.Properties选项卡里的Output Path为测试用例生成的目录,修改为test目录:${SOURCEPATH}/../../test/java/${PACKAGE}/${FILENAME}
4.切换到JUnit 4选项卡,可以修改生成测试用例的模板,比如类名、包名等
第三步
为指定的方法创建自动创建测试用例右键
Junit中@Autowired失效
今天学习spring注解的时候,用junit来测试
利用注解在容器中创建Student对象
然后用@Autowired注解进行自动装配
出现了空指针异常
原因
在Test方法执行的时候,并不会给你创建容器,junit也不知道你是否在使用spring,默认单例模式下没有容器也就不会有@Autowired自动装配有效
解决方案
1. 导入 Spring 整合 Junit 的 jar包
在pom.xml中加入依赖
...
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
...
注意在使用5.x的spring依赖时,junit版本需要在4.12及以上
2. 使用 Junit 提供的一个注解 –@Runwith把原有的 main 方法替换了,替换成 Spring 提供
3. 告知 Spring 的运行器, Spring 和 ioc 创建是基于 xml 还是注解的,并且说明位置,用到的注解如下
@ContextConfiguration
Locations : 指定 xml 文件的位置,加上 classpath 关键字,表示在类路径下(适用于使用xml文件进行IOC)
classes : 指定注解类所在地位置(适用于你使用新创建的配置类取代xml文件进行IOC)
如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class test010 {
@Autowired
Student student;
@Test
public void test()
{
student.say();
}
}
运行结果
hello,Student
来源:https://blog.csdn.net/u012669002/article/details/110232210


猜你喜欢
- 昨天晚上写代码的时候偶然发现 DateTime 里出现了星期几,当时一阵凌乱,去网上百度没有详细解决办法,很多人说可以用用 ToString
- 一.概述先给大家看一下效果图:点击中间的显示弹框按钮,从底部弹出来一个对话框,用户可以点击拍照或者从相册选择进行相应的操作,下面看看怎么实现
- bootstrap和application的区别说明bootstrap和application都是SpringBoot项目中的配置文件,他们
- Android开发,触控无处不在。对于一些 不咋看源码的同学来说,多少对这块都会有一些疑惑。View事件的分发机制,不仅在做业务需求中会碰到
- 实例如下:package com.huad.luck;import java.util.ArrayList;import java.util
- * 什么是 * Spring MVC中的 * (Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户
- 今天使用mybatis-plus自动填充插入和更新时间有8小时时差后来发现只需要修改一下mybaits连接的url即可原先我是用的datas
- 后端接收form-data创建实体类public class Para_list //实体类 { &n
- 一、JavaMail API简介 JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail
- 工厂模式在Java应用程序中对象无处不在,这些对象都需要进行创建,如果创建的时候直接new对象,那么如果我们要更换对象,所有new对象的地方
- flutter组件的实现参考了react的设计理念,界面上所有的内容都是由组件构成,同时也有状态组件和无状态组件之分,这里简单介绍最基本的组
- 前言一入 Android 深似海,相信很多 Android 开发者深有体会,Android 系统版本的碎片化,Android 硬件设备的多样
- 今天没有继续学习新知识点,画出了一个随鼠标画出的 图形,知识点全都是之前学的,话不多说,先上图:代码部分: // ope
- 简介虽然java有自动化的GC,但是还会有内存泄露的情况。当然java中的内存泄露跟C++中的泄露不同。在C++中所有被分配的内存对象都需要
- 前言最近项目中又一次需要集成友盟的三方登录与分享,之前没有记录过,所以这次来写一下...准备工作1.注册友盟账号创建应用,获取key:申请地
- 一,Java Object Serialization1,什么是序列化(Serialization)序列化是指将结构化对象转化为字节流以便在
- 最近研究了一下android摄像头开发相关的技术,也看了Google提供的Camera2Basic调用示例,以及网上一部分代码,但都是在Te
- 本文实例讲述了Android编程实现使用webView打开本地html文件的方法。分享给大家供大家参考,具体如下:在布局的配置文件里:<
- 先看看常规的隐藏状态栏的方法:方法一:@Overrideprotected void onCreate(Bundle savedInstan
- 通常C#使用基于XML的配置文件,不过如果有需要的话,比如要兼顾较老的系统,可能还是要用到INI文件。但C#本身并不具备读写INI文件的AP