赞
踩
概念:
单元测试引用:
spring initialize
创建的Spring Boot项目会在Maven中自动携带很多starter依赖:其中包含了一个名为spring-boot-starter-test
的依赖,本文是围绕这个依赖展开。
spring-boot-starter-test
依赖):<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
spring-boot-starter-test
UML图:
序号 | 库名的解释 |
---|---|
1 | JUnit 5:包含兼容 JUnit 4,Java 应用程序单元测试的事实标准 |
2 | Spring Test 和 SpringBootTest:对Spring Boot应用程序的公共和集成测试支持 |
3 | AssertJ:流式断言库 |
4 | Hamcrest:匹配对象库 |
5 | Mockito:Java 模拟框架 |
6 | JSONassert:JSON 断言库 |
7 | JsonPath:JSON XPath |
在没有接触单元测试之前我们是怎么做测试的?一般有两个方法:
方法 | 弊端 |
---|---|
方法一:启动整个应用,像用户正常操作一样。点击界面按钮,调用一个 API 等。 | 每次测试都要启动整个项目 |
方法二:在代码某个地方写一个临时入口,例如 java 的 main 方法,测试某个方法或者某个类。 | 入口用完要删除,不然会影响项目的运行速度或效率 |
在时间允许的情况下,编写单元测试是程序员对代码的自测,这是对自己代码的负责。
写单元测试的两个动机:
在面向对象的程序设计中,模拟对象(英语:mock object)是以可控的方式模拟真实对象行为的假对象。在编程过程中,通常通过模拟一些输入数据,来验证程序是否达到预期结果。
使用模拟对象,可以模拟复杂的、真实的对象行为。如果在单元测试中无法使用真实对象,可采用模拟对象进行替代。
MockMvc是由spring-test包提供,实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。同时提供了一套验证的工具,结果的验证十分方便。
接口MockMvcBuilder,提供一个唯一的build方法,用来构造MockMvc。主要有两个实现:StandaloneMockMvcBuilder和DefaultMockMvcBuilder。
实例化方法 | 实例&解释 |
---|---|
方法一 | mockMvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();通过参数指定一组控制器,这样就不需要从上下文获取了 |
方法二 | mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();指定WebApplicationContext,将会从该上下文获取相应的控制器并得到相应的MockMvc |
图一
图二
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环境的上下文的支持
Controller层部分的代码小名将分为三个代码块讲解,里面有看不懂的代码先不要着急哦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。