Springboot测试类之@RunWith注解
本文内容纲要:
@runWith注解作用:
--@RunWith就是一个运行器
--@RunWith(JUnit4.class)就是指用JUnit4来运行
--@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境,以便在测试开始的时候自动创建Spring的应用上下文
--@RunWith(Suite.class)的话就是一套测试集合
引申:
SpringBoot1.5.2Junit测试
使用Spring进行单元测试
方法1:
@RunWith(SpringRunner.class)
@SpringBootTest(classes=Application.class,webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
@EnableAutoConfiguration
publicclassBBTestAA{
@Autowired
privateTestRestTemplatetestRestTemplate;
//Application.class为SpringBoot的启动入口类,每个SpringBoot项目大家都会配置
}
如果pom.xml中有如下代码,这行@RunWith(SpringRunner.class)
就不会出现SpringRunner,反而有@RunWith(SpringJUnit4ClassRunner.class)
<!--spring-test测试=-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
如果pom.xml中没有这段,则@RunWith(SpringRunner.class)
不会报错。如果有这段:①未注释<scope>test</scope>
会报错;②注释<scope>test</scope>
不会报错
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
如果pom.xml中没有这段,则会报错。如果有这段:①未注释<scope>test</scope>
SpringRunner、SpringBootTest无法引用,会报错;②注释<scope>test</scope>
不会报错
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.5.9.RELEASE</version>
<scope>test</scope>
</dependency>
总结起来,想要使用
@RunWith(SpringRunner.class)
@SpringBootTest(classes=App.class)
pom.xml中应该引用这两个
<!--spring-test测试=-->
<!--<dependency>-->
<!--<groupId>org.springframework</groupId>-->
<!--<artifactId>spring-test</artifactId>-->
<!--<version>4.2.4.RELEASE</version>-->
<!--</dependency>-->
<!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.5.9.RELEASE</version>
<!--<scope>test</scope>-->
</dependency>
<!--https://mvnrepository.com/artifact/junit/junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--<scope>test</scope>-->
</dependency>
方法2:
如果有<scope>test</scope>
@RunWith报红,没有<scope>test</scope>
会引入该类
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
如果有<scope>test</scope>
@SpringBootTest报红,没有<scope>test</scope>
会引入该类
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>1.5.9.RELEASE</version>
<scope>test</scope>
</dependency>
如果是<version>4.2.4.RELEASE</version>
SpringRunner报红,如果<version>4.2.4.RELEASE</version>
会引入该类
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
所以最后要正确使用,需引入这些架包
<!--spring-test测试=-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
2.在IDE中新增JunitTest类
@RunWith(SpringRunner.class)//14.版本之前用的是SpringJUnit4ClassRunner.class
@SpringBootTest(classes=Application.class)//1.4版本之前用的是//@SpringApplicationConfiguration(classes=Application.class)
publicclassSystemInfoServiceImplTest{
@Autowired
privateISystemInfoServicesystemInfoservice;
@Test
publicvoidadd()throwsException{
}
@Test
publicvoidfindAll()throwsException{
}
}
主要是注解的更改,如果注解用的不对,会报各种奇怪的问题,例如applicationContext找不到,datasource实例化失败等等。
- 为了支持上面两个注解,maven文件中要用对依赖以及版本,我当时添加SpringRunner.class所在的依赖jar时,由于用了idea的auto-imported,IDE自动导入了版本是3.x的,实际应该导入4.x,我一直以为idea导入的是正确的,导致在这上面费时颇多,后来我手工写入就解决了。下面是正确的springboottest的maven依赖
本文内容总结:
原文链接:https://www.cnblogs.com/qingmuchuanqi48/p/11886618.html