• Springboot测试类之@RunWith注解


    @runWith注解作用:
    --@RunWith就是一个运行器
    --@RunWith(JUnit4.class)就是指用JUnit4来运行
    --@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环 境,以便在测试开始的时候自动创建Spring的应用上下文
    --@RunWith(Suite.class)的话就是一套测试集合

    引申:
    Spring Boot 1.5.2 Junit测试
    使用 Spring 进行单元测试

    方法1:

    复制代码
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    @EnableAutoConfiguration
    public class BBTestAA {
        @Autowired
        private TestRestTemplate testRestTemplate;
    
        //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)
    public class SystemInfoServiceImplTest {
    
            @Autowired
            private ISystemInfoService systemInfoservice;
    
            @Test
            public void add() throws Exception {
            }
    
            @Test
             public void findAll() throws Exception {
             }
    
    }
    复制代码

    主要是注解的更改,如果注解用的不对,会报各种奇怪的问题,例如applicationContext找不到,datasource实例化失败等等。

    1. 为了支持上面两个注解,maven文件中要用对依赖以及版本,我当时添加SpringRunner.class所在的依赖jar时,由于用了idea的auto-imported,IDE自动导入了版本是3.x的,实际应该导入4.x,我一直以为idea导入的是正确的,导致在这上面费时颇多,后来我手工写入就解决了。下面是正确的spring boot test的maven依赖
  • 相关阅读:
    Spring注释事务失效及解决办法
    在使用springMVC时,我使用了@Service这样的注解,发现使用注解@Transactional声明的事务不起作用
    如何在Oracle中复制表结构和表数据
    Tomcat Deployment failure ,locked one or more files
    java中对List中对象排序实现
    HDU 5002 Tree LCT 区间更新
    2014-2015 ACM-ICPC, Asia Xian Regional Contest G The Problem to Slow Down You 回文树
    Codeforces Round #323 (Div. 1) B. Once Again... 暴力
    Codeforces Round #323 (Div. 2) C. GCD Table 暴力
    hdu 5497 Inversion 树状数组 逆序对,单点修改
  • 原文地址:https://www.cnblogs.com/heihei1990/p/13859334.html
Copyright © 2020-2023  润新知