Spring Boot 单元测试,保姆级教程!()

  本篇文章为你整理了Spring Boot 单元测试,保姆级教程!()的详细内容,包含有 Spring Boot 单元测试,保姆级教程!,希望能帮助你了解 Spring Boot 单元测试,保姆级教程!。

  分享Java技术,高并发编程,分布式技术,架构设计,Java面试题,算法,行业动态,程序人生等。

  
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。在Java中单元测试的最小单元是类。

  
单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。执行单元测试,就是为了证明这 段代码的行为和我们期望是否一致。

  
单元测试引用:

  众所周知,通过spring initialize创建的Spring Boot项目会在Maven中自动携带很多starter依赖:

  其中包含了一个名为spring-boot-starter-test的依赖,本文是围绕这个依赖展开。

  Spring Boot 基础就不介绍了,推荐看这个免费教程:

  https://github.com/javastacks/spring-boot-best-practice

  Spring Boot中引入单元测试很简单,添加如下依赖(即spring-boot-starter-test依赖):

  

 dependency 

 

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-test /artifactId

   scope test /scope

   /dependency

  

 

  spring-boot-starter-test有如下几个库:

  spring-boot-starter-testUML图:

  二、单元测试的作用

  在没有接触单元测试之前我们是怎么做测试的?一般有两个方法:

  在时间允许的情况下,编写单元测试是程序员对代码的自测,这是对自己代码的负责。

  写单元测试的两个动机:

  
什么是Mock?

  在面向对象的程序设计中,模拟对象(英语:mock object)是以可控的方式模拟真实对象行为的假对象。在编程过程中,通常通过模拟一些输入数据,来验证程序是否达到预期结果。

  为什么使用Mock对象?

  使用模拟对象,可以模拟复杂的、真实的对象行为。如果在单元测试中无法使用真实对象,可采用模拟对象进行替代。

  MockMvc的概念

  MockMvc是由spring-test包提供,实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。同时提供了一套验证的工具,结果的验证十分方便。

  接口MockMvcBuilder,提供一个唯一的build方法,用来构造MockMvc。主要有两个实现:StandaloneMockMvcBuilder和DefaultMockMvcBuilder。

  MockMVC的基本步骤

  (1) mockMvc.perform执行一个请求。

  (2) MockMvcRequestBuilders.get(“XXX”)构造一个请求。

  (3) ResultActions.param添加请求传值

  (4) ResultActions.accept()设置返回类型

  (5) ResultActions.andExpect添加执行完成后的断言。

  (6) ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情,比如处使用print()输出整个响应结果信息。

  (7) ResultActions.andReturn表示执行完成后返回相应的结果。

  四、Service层的单元测试

  第一步:

  Spring Boot中单元测试类写在src/test/java目录下,你可以手动创建具体测试类,也可以通过IDEA自动创建测试类,如下图:(注:点选并打开相应代码界面,再点击菜单栏的Navigate)

  第二步:

  按照第一步的方法,点击测试后,出现图一 的对话框(如果想要测试的类已经存在测试类了会被列出来,也可以重新创建一个新的测试类),点击”Create New Test…”会弹出图二 的对话框,可以选择是否生成setUp以及要测试的成员方法等:

  第三步:

  至此Service层的测试类就创建好了,测试类自动生成到了src/test/java目录下项目的同级目录中 ,如下图:

  Service层测试代码如下:

  

@SpringBootTest

 

  @RunWith(SpringRunner.class)

  public class XXXServiceTest {

  @Resource

  private XXXService XXXService;

  @Test

  public void conflictTime() {

   DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");

   LocalDate start = LocalDate.parse("2020-10-26", dtf);

   LocalDate end = LocalDate.parse("2020-10-31", dtf);

   Integer integer = XXXService.ConflictTime("10000001", start, end);

   Assert.assertThat(integer, Matchers.notNullValue());//assertThat断言后面介绍

  

 

  注解解释:

  @SpringBootTest:获取启动类,加载配置,寻找主配置启动类(被 @SpringBootApplication 注解的) @RunWith(SpringRunner.class):让JUnit运行Spring的测试环境,获得Spring环境的上下文的支持。

  推荐一个开源免费的 Spring Boot 最全教程:

  https://github.com/javastacks/spring-boot-best-practice

  五、Controller层的单元测试

  创建测试类步骤见第四部分,此处略。

  第四部分只是针对Service层做了测试,但是咱么也需要对Controller层(API)做测试,这时候就用到MockMvc了,它使得你无需启动项目工程就能测试这些接口

  MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。

  Controller层部分的代码将分为三个代码块讲解,里面有看不懂的代码先不要着急哦

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: