【七日打卡】spring单元测试快速入门

简介: 测试是软件开发中不可或缺的一环。在测试金字塔中,单元测试是基于最下面的一层,成本最低,响应速度最快。

测试是软件开发中不可或缺的一环。在测试金字塔中,单元测试是基于最下面的一层,成本最低,响应速度最快。

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

  • spring-boot-test: 支持测试的核心内容。
  • spring-boot-test-autoconfigure:支持测试的自动化配置。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
复制代码

只要引入spring-boot-starter-test的依赖 就能使用这些SpringBoot的测试模块,同时还包含如下这些库:

  • Junit: Java应用程序单元测试标准类库。
  • Spring Test & Spring Boot Test: Spring Boot 应用程序功能集成化测试支持。
  • AssertJ: 一个轻量级断言类库。
  • Hamcrest: 一个对象匹配器类库。
  • Mockito: 一个java Mock测试框架。
  • JSONassert: 一个用于JSON的断言库。
  • JsonPath: 一个Json操作类库。

创建测试类和测试方法

要让一个普通类变成一个单元测试类,需要如下两步操作:

  1. 在类名上加@SpringBootTest@RunWith(SpringRunner.class)两个注解即可。
  2. 在测试方法上加上@Test注解。

使用IDEA可以使用快捷键ctrl + shift + t 或者选中当前类名 使用快捷键alt + enter ,向下选择Create Test 即可进入测试类的快捷创建中。

代码示例:

import com.jls.domain.Learn;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import static org.hamcrest.CoreMatchers.*;
@RunWith(SpringRunner.class)
@SpringBootTest
public class LearnServiceTest {
    @Autowired
    private LearnService learnService;
    @Test
    public void getLearn(){
        Learn learn = learnService.selectByKey(1001L);
        Assert.assertThat(learn.getAuthor(),is("蒋老湿"));
    }
}
复制代码

Junit 基本注解介绍

  • @BeforeClass: 在所有测试方法执行前执行一次,一般在其中写上整体初始化的代码。
  • @AfterClass: 在所有测试方法后执行一次,一般在其中写上销毁和释放资源的代码。
  • @Before: 在每个方法测试前执行,一般用来初始化方法(比如我们在测试别的方法时,类中与其他测试方法共享的值已经被改变,为了保证测试结果的有效性,我们会在@Before注解的方法中重置数据)
  • @After: 在每个测试方法执行后,在方法执行完成后要做的事情。
  • @Test(timeout = 1000): 测试方法执行超过1000毫秒后算超时,测试将失败。
  • @Test(expected = Exception.class): 测试方法期望得到的异常类,如果方法执行没有抛出指定的异常,则测试失败。
  • @Ignore("not ready yet"): 执行测试时将忽略掉此方法,如果用于修饰类,则忽略整个类。
  • @Test: 编写一般测试用例用。
  • @RunWith: 在 Junit 中有很多个 Runner,他们负责调用你的测试代码,每一个 Runner 都有各自的特殊功能,可以根据需要选择不同的 Runner 来运行你的测试代码。如果只是简单的做普通 Java 测试,省略 @RunWith 注解。
  • @FixMethodOrder(MethodSorters.JVM): 保留测试方法的执行顺序为JVM返回的顺序。每次测试的执行顺序有可能会所不同。
  • @FixMethodOrder(MethodSorters.NAME_ASCENDING): 根据测试方法的方法名排序,按照词典排序规则(ASC,从小到大,递增)。

一个单元测试类执行顺序为:

@BeforeClass -> @Before -> @Test -> @After -> @AfterClass

每一个测试方法的调用顺序为:

@Before -> @Test -> @After

maven对单元测试的支持

Maven在执行特定生命周期构建的时候,会通过其自带的插件maven-surefire-plugin来执行JUnit或者TestNG的测试用例。

在默认情况下,maven-surefire-plugin会自动执行测试源码路径(默认为src/test/java/)下所有符合一组命名规范的测试类。这组模式规则为:

  1. */Test.java:任何子目录下所有命名以Test开关的Java类。
  2. */Test.java:任何子目录下所有命名以Test结尾的Java类。
  3. */TestCase.java:任何子目录下所有命名以TestCase结尾的Java类。

Assert断言常用方法

  • assertEquals("message",A,B): 判断对象A和B是否相等,这个判断比较时调用了equals()方法。
  • assertSame("message",A,B): 判断对象A和B是否相同,使用的是==操作符。
  • assertTure("message",A): 判断A条件是否为真。
  • assertFalse("message",A): 判断A条件是否不为真。
  • assertNotNull("message",A): 判断A对象是否不为null
  • assertArrayEquals("message",A,B): 判断A数组与B数组是否相等。
目录
相关文章
|
2月前
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
288 2
|
4月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
25天前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
36 4
|
26天前
|
Java 测试技术 数据库连接
使用Spring Boot编写测试用例:实践与最佳实践
使用Spring Boot编写测试用例:实践与最佳实践
59 0
|
2月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
52 1
|
2月前
|
开发框架 Java API
「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架
「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架
102 0
|
3月前
|
JavaScript 前端开发 Java
Spring Boot+cucumber+契约测试
Spring Boot+cucumber+契约测试
29 0
Spring Boot+cucumber+契约测试
|
4月前
|
测试技术 Java Spring
Spring 框架中的测试之道:揭秘单元测试与集成测试的双重保障,你的应用真的安全了吗?
【8月更文挑战第31天】本文以问答形式深入探讨了Spring框架中的测试策略,包括单元测试与集成测试的有效编写方法,及其对提升代码质量和可靠性的重要性。通过具体示例,展示了如何使用`@MockBean`、`@SpringBootTest`等注解来进行服务和控制器的测试,同时介绍了Spring Boot提供的测试工具,如`@DataJpaTest`,以简化数据库测试流程。合理运用这些测试策略和工具,将助力开发者构建更为稳健的软件系统。
64 0
|
4月前
|
前端开发 Java 测试技术
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
|
5月前
|
Java 测试技术 开发工具
使用Spring Boot和Spock进行单元测试
使用Spring Boot和Spock进行单元测试