【七日打卡】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
Spring Boot 基于 JUnit 5 实现单元测试
Spring Boot 基于 JUnit 5 实现单元测试
28 0
|
2月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
9 0
|
4月前
|
消息中间件 Java 测试技术
Spring Cloud Alibaba环境问题之测试环境失败如何解决
Spring Cloud Alibaba提供了一套在Spring Cloud框架基础上构建的微服务解决方案,旨在简化分布式系统的开发和管理;本合集将探讨Spring Cloud Alibaba在实际应用中的部署和使用技巧,以及该框架常见问题的诊断方法和解决步骤。
|
1天前
|
Java 测试技术 API
Spring Boot 单元测试 0基础教程
Spring Boot 单元测试 0基础教程
8 0
|
11天前
|
Java 测试技术 Maven
Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]
Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]
|
16天前
|
安全 Java 测试技术
Spring Boot 自动化单元测试类的编写过程
企业开发不仅要保障业务层与数据层的功能安全有效,也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的,并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测试呢?答案是可以的,我们可以使用MockMvc来实现它。
47 0
|
17天前
|
Java 测试技术 开发者
[AIGC] 使用Spring Boot进行单元测试:一份指南
[AIGC] 使用Spring Boot进行单元测试:一份指南
|
22天前
|
存储 安全 Java
第9章 Spring Security 的测试与维护 (2024 最新版)(下)
第9章 Spring Security 的测试与维护 (2024 最新版)
21 1
|
22天前
|
安全 Java 测试技术
第9章 Spring Security 的测试与维护 (2024 最新版)(上)
第9章 Spring Security 的测试与维护 (2024 最新版)
24 0
|
1月前
|
Java 测试技术 Maven
Spring整合JUnit实现单元测试
本文介绍了如何在Java开发中使用Spring与JUnit进行单元测试。首先,设置JUnit和Spring环境,创建待测试的业务逻辑类,如MyService。接着,编写JUnit测试类MyServiceTest,使用`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`注解,注入并测试MyService的方法。此外,借助Mockito模拟依赖对象,以及使用Spring TestContext框架进行集成测试,确保测试的隔离性和环境的稳定性。通过这些方法,可以提升代码质量和测试效率。
28 1