• spingboot2.x集成单元测试


    一注解说明

    @SpringBootTest注解是扫描配置来构建测试用的Spring上下文环境。
    @RunWith注解声明测试是在spring环境下运行的,其必须要有一个构造器的类才能运行。
    SpringRunner.class是继承SpringJUnit4ClassRunner,主要作用是spring集成junit单元测试类。

    二 顶级类测试

    2.1引入单元测试依赖

    		  <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-test-autoconfigure</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- spring 5.0 webflux​-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-webflux</artifactId>
            </dependency>​
    

    2.2 创建包结构

    注意哦,在测试类的java目录下和main子目录的java目录下,其最顶级的启动类包结构应该相同,否则要加包扫描注解。
    本次示例先演示没有启动类的情况。

    2.3 创建顶级类

    /**
     * @Author lsc
     * @Description <p> 顶级类</p>
     * @Date 2019/10/20 18:14
     * @Version 1.0
     */
    
    public class TestConfig {
    
        public String getUser(){
            return "youku1327";
        }
    }
    

    2.4 顶级类测试示例

    /**
     * @Author lsc
     * @Description <p> </p>
     * @Date 2019/10/20 17:36
     * @Version 1.0
     */
    @RunWith(SpringRunner.class)
    // 如果没有main主类,是顶级类要指定classes
    @SpringBootTest(classes = TestConfig.class)
    public class Youku1Test {
    
        @Test
        public void test(){
            TestConfig testConfig = new TestConfig();
            String user = testConfig.getUser();
            // youku1327
            System.out.println(user);
        }
    }
    

    三 MockMvc 测试

    3.1 创建controller层类

    /**
     * @Author lsc
     * @Description <p> </p>
     * @Date 2019/10/20 18:53
     * @Version 1.0
     */
    @RestController
    public class TestController {
    
        @GetMapping("youku1327")
        public String getUser(){
            return "Hello World youku1327";
        }
    }
    

    3.2 创建主启动类

    /**
     * @Author lsc
     * @Description <p> </p>
     * @Date 2019/10/20 18:45
     * @Version 1.0
     */
    @SpringBootApplication
    public class TestApplication {
    
        public static void main(String[] args) {
    
            SpringApplication.run(TestApplication.class,args);
        }
    }
    

    3.3 MockMvc测试示例

    /**
     * @Author lsc
     * @Description <p> web 测试 </p>
     * @Date 2019/10/20 18:33
     * @Version 1.0
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest
    @AutoConfigureMockMvc
    public class WebTest {
    
        @Autowired
        private MockMvc mvc;
    
        @Test
        public void exampleTest() throws Exception {
            // get请求  rui /youku1327 状态 200 期望值 Hello World youku1327
            ResultActions resultActions = this.mvc.perform(get("/youku1327")).andExpect(status().isOk())
                    .andExpect(content().string("Hello World youku1327"));
    
        }
    
    }
    

    四 webClient测试示例

    在步骤三的基础上进行测试。

    /**
     * @Author lsc
     * @Description <p> </p>
     * @Date 2019/10/20 19:00
     * @Version 1.0
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest
    @AutoConfigureWebTestClient
    @WebFluxTest(TestController.class)
    public class WebClientTest {
    
       WebTestClient webClient = WebTestClient.bindToController(new TestController()).build();
    
        /*@Autowired
        private WebTestClient webClient;*/
    
        @Test
        public void exampleTest() {
    
            EntityExchangeResult<String> entityExchangeResult = webClient.get().uri("/youku1327").exchange().expectStatus().isOk()
                    .expectBody(String.class).returnResult();
            // Hello World youku1327
            System.out.println(entityExchangeResult.getResponseBody());
        }
    }
    

    五 WebClient随机端口测试示例

    /**
     * @Author lsc
     * @Description <p> </p>
     * @Date 2019/10/20 19:27
     * @Version 1.0
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class webReadomTest {
    
        @Autowired
        private WebTestClient webClient;
    
        @Test
        public void exampleTest() {
            EntityExchangeResult<String> entityExchangeResult = this.webClient.get()
                    .uri("/youku1327").exchange().expectStatus().isOk()
                    .expectBody(String.class).returnResult();
            // Hello World youku1327
            System.out.println(entityExchangeResult.getResponseBody());
        }
    
    }
    

    六 TestRestTemplate测试示例

    /**
     * @Author lsc
     * @Description <p> </p>
     * @Date 2019/10/20 19:39
     * @Version 1.0
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class RestTest {
    
        @Autowired
        private TestRestTemplate restTemplate;
    
        @Test
        public void exampleTest() {
            String body = this.restTemplate.getForObject("/youku1327", String.class);
            //Hello World youku1327
            System.out.println(body);
        }
    }
    

    七 更多测试

    更多测试信息请查看官网指南
    https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/html/

    公众号更多技术干货和java学习资源。
    在这里插入图片描述

  • 相关阅读:
    我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承(转载)
    我的WCF之旅(4):WCF中的序列化(Serialization) Part I(转载)
    我的WCF之旅(1):创建一个简单的WCF程序(转载)
    我的WCF之旅(3):在WCF中实现双向通信(Bidirectional Communication)(转载)
    我的WCF之旅(2):Endpoint Overview(转载)
    C#中Attribute特性的用法(转载)
    我的WCF之旅(5):Service Contract中的重载(Overloading)(转载)
    我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案(转载)
    [转] 81条经典话语~~~当裤子失去皮带,才懂得什麽叫做依赖
    HP大中华区总裁孙振耀退休十五天后九大感言,快毕业或者已经毕业的都来看看,与其浑浑噩噩一辈子,不如花这半小时看看
  • 原文地址:https://www.cnblogs.com/zszxz/p/12102042.html
Copyright © 2020-2023  润新知