springBootJunit测试⽤例出现@Autowired不⽣效的解决
⽬录
springBoot Junit测试⽤例出现@Autowired不⽣效
1,测试类上⾯添加⽀持的注解
2,出现错误
3,注解解释
4,junit测试如何在idea上通过类中⽅法直接⽣成测试⽤例
第⼀步
第⼆步
第三步
Junit中@Autowired失效
原因
解决⽅案
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包
在l中加⼊依赖
...
<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 = "l")
public class test010 {
@Autowired
Student student;
@Test
public void test()
{
springframework和springbootstudent.say();
}
}
运⾏结果
hello,Student
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。