Spring Boot 单元测试详解+实战教程

Spring Boot 的测试类库

Spring Boot 提供了许多实用工具和注解来帮助测试应用程序,主要包括以下两个模块。

  • spring-boot-test:支持测试的核心内容。
  • spring-boot-test-autoconfigure:支持测试的自动化配置。

开发进行只要使用 spring-boot-starter-test 启动器就能引入这些 Spring Boot 测试模块,还能引入一些像 JUnit,AssertJ,Hamcrest 及其他一些有用的类库,具体如下所示。

  • JUnit:Java 应用程序单元测试标准类库。
  • Spring Test & Spring Boot Test:Spring Boot 应用程序功能集成化测试支持。
  • AssertJ:一个轻量级的断言类库。
  • Hamcrest:一个对象匹配器类库。
  • Mockito:一个Java Mock测试框架,默认支付 1.x,可以修改为 2.x。
  • JSONassert:一个用于JSON的断言库。
  • JsonPath:一个JSON操作类库。

下面是 Maven 的依赖关系图。

以上这些都是 Spring Boot 提供的一些比较常用的测试类库,如果上面的还不能满足你的需要,你也可以随意添加其他的以上没有的类库。

测试 Spring Boot 应用程序

添加 Maven 依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>1.5.10.RELEASE</version>
    <scope>test</scope>
</dependency>

1、 要让一个普通类变成一个单元测试类只需要在类名上加入 @SpringBootTest 和 @RunWith(SpringRunner.class) 两个注释即可。

2、 在测试方法上加上 @Test 注释。

如果测试需要做 REST 调用,可以 @Autowire 一个 TestRestTemplate。

@RunWith(SpringRunner.class)
@SpringBootTest
public class BBTestAA {

   @Autowired
   private TestRestTemplate testRestTemplate;

   @Test
   public void testDemo() {
    ...
   }

}

GET请求测试

@Test
public void get() throws Exception {
    Map<String,String> multiValueMap = new HashMap<>();
    multiValueMap.put("username","Java技术栈");
    ActResult result = testRestTemplate.getForObject("/test/getUser?username={username}",ActResult.class,multiValueMap);
    Assert.assertEquals(result.getCode(),0);
}

POST请求测试

@Test
public void post() throws Exception {
    MultiValueMap multiValueMap = new LinkedMultiValueMap();
    multiValueMap.add("username","Java技术栈");
    ActResult result = testRestTemplate.postForObject("/test/post",multiValueMap,ActResult.class);
    Assert.assertEquals(result.getCode(),0);
}

文件上传测试

@Test
public void upload() throws Exception {
    Resource resource = new FileSystemResource("/home/javastack/test.jar");
    MultiValueMap multiValueMap = new LinkedMultiValueMap();
    multiValueMap.add("username","Java技术栈");
    multiValueMap.add("files",resource);
    ActResult result = testRestTemplate.postForObject("/test/upload",multiValueMap,ActResult.class);
    Assert.assertEquals(result.getCode(),0);
}

文件下载测试

@Test
public void download() throws Exception {
    HttpHeaders headers = new HttpHeaders();
    headers.set("token","javastack");
    HttpEntity formEntity = new HttpEntity(headers);
    String[] urlVariables = new String[]{"admin"};
    ResponseEntity<byte[]> response = testRestTemplate.exchange("/test/download?username={1}",HttpMethod.GET,formEntity,byte[].class,urlVariables);
    if (response.getStatusCode() == HttpStatus.OK) {
        Files.write(response.getBody(),new File("/home/javastack/test.jar"));
    }
}

往期干货推荐

1. Java 10 实战第 1 篇:局部变量类型推断

2. 图解 https 单向认证和双向认证

3. 最新后端架构师技术图谱!附学习资料~

4. Spring Boot 集成 Mybatis 实现双数据源

5. Java 中的伪共享详解及解决方案

原文发布于微信公众号 - Java技术栈(javastack)

原文发表时间:2018-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java Web

Spring(2)——Spring IoC 详解

Spring IoC 概述 IoC:Inverse of Control(控制反转) 读作“反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程...

48440
来自专栏王二麻子IT技术交流园地

《SpringMVC从入门到放肆》六、SpringMVC开发Controller的方法总结

到目前为止我们已经大概学习了StringMVC的执行流程,以及详细的处理器映射器和处理器适配器的执行流程,并可以自己写一个配置方式开发的小Demo了。今天我们来...

19720
来自专栏Java与Android技术栈

使用 Kotlin + WebFlux/RxJava 2 实现响应式以及尝试正式版本的协程WebFluxRxJava 2Kotlin 1.3 的 Coroutines总结

在前一篇文章《使用 Kotlin + Spring Boot 进行后端开发》中,曾介绍过尝试使用 Kotlin 来做后端开发。这一次,尝试 WebFlux 以及...

24210
来自专栏IT笔记

SpringBoot开发案例之整合Dubbo提供者(一)

既然是开发案例,显然不会扯那么多老婆舌,有不清楚这两个东东的请自行百度。 ? 0.jpg 开发环境 JDK1.7、Maven、Eclipse、SpringBoo...

459130
来自专栏JavaEdge

SpringMVC之@CookieValue注解使用@CookieValue注解映射cookie值

34960
来自专栏会跳舞的机器人

Spring Cloud(5)——熔断器

Hystrix熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

31630
来自专栏猿天地

Spring Boot系列之环境搭建

16年开始就在写Spring Boot相关的文章了,之前一直是在自己猿天地的博客上发布,今年开始维护公众号,大部分时间都在写新的文章。

13630
来自专栏阿杜的世界

利用Mockito模拟DB

前两篇文章的主要内容是:为了给执行测试,如何建立数据库表和导入初始数据。这里我们将学习如何利用Mockito框架和一些注解模拟(mock)Reposito...

15020
来自专栏JAVA技术站

JFinal整合Spring开发 原

思路大概是这样子的,首先需要初始化Spring的容器,把所有注解类加入到容器中,Spring里的AnnotationConfigApplicationConte...

11120
来自专栏WindCoder

Rails Service Objects: A Comprehensive Guide

Ruby on Rails ships with everything you need to prototype your application quick...

8810

扫码关注云+社区

领取腾讯云代金券