spingboot集成单元测试

Posted 知识追寻者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spingboot集成单元测试相关的知识,希望对你有一定的参考价值。

一注解说明


@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 */@RestControllerpublic 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 */@SpringBootApplicationpublic 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@AutoConfigureMockMvcpublic 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/






以上是关于spingboot集成单元测试的主要内容,如果未能解决你的问题,请参考以下文章

测试基础之集成测试(初入行)

spingboot集成jpa

SpingBoot之集成Redis集群

java抽象类怎么写单元测试

C代码单元集成测试培训

技术分享 | 单元测试体系集成