spring--单元测试

单元测试

1、JUnit5 的变化
Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库
作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Platform: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。
JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部 包含了一个测试引擎,用于在Junit Platform上运行。
JUnit Vintage: 由于JUint已经发展多年,为了照顾老的项目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的测试引擎。


注意:
SpringBoot 2.4 以上版本移除了默认对 Vintage 的依赖。如果需要兼容junit4需要自行引入(不能使用junit4的功能 @Test)
JUnit 5’s Vintage Engine Removed from spring-boot-starter-test,如果需要继续兼容junit4需要自行引入vintage
 


SpringBoot整合Junit以后。
●编写测试方法:@Test标注(注意需要使用junit5版本的注解)
●Junit类具有Spring的功能,@Autowired、比如 @Transactional 标注测试方法,测试完成后自动回滚

2、JUnit5常用注解
JUnit5的注解与JUnit4的注解有所变化
JUnit 5 User Guide
●@Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试
●@ParameterizedTest :表示方法是参数化测试,下方会有详细介绍
●@RepeatedTest :表示方法可重复执行,下方会有详细介绍
●@DisplayName :为测试类或者测试方法设置展示名称
●@BeforeEach :表示在每个单元测试之前执行
●@AfterEach :表示在每个单元测试之后执行
●@BeforeAll :表示在所有单元测试之前执行
●@AfterAll :表示在所有单元测试之后执行
●@Tag :表示单元测试类别,类似于JUnit4中的@Categories
●@Disabled :表示测试类或测试方法不执行,类似于JUnit4中的@Ignore
●@Timeout :表示测试方法运行如果超过了指定时间将会返回错误
●@ExtendWith :为测试类或测试方法提供扩展类引用

3、断言(assertions)
断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法。JUnit 5 内置的断言可以分成如下几个类别:
检查业务逻辑返回的数据是否合理。
所有的测试运行结束以后,会有一个详细的测试报告;
1、简单断言
用来对单个值进行简单的验证。如:

方法

说明

assertEquals

判断两个对象或两个原始类型是否相等

assertNotEquals

判断两个对象或两个原始类型是否不相等

assertSame

判断两个对象引用是否指向同一个对象

assertNotSame

判断两个对象引用是否指向不同的对象

assertTrue

判断给定的布尔值是否为 true

assertFalse

判断给定的布尔值是否为 false

assertNull

判断给定的对象引用是否为 null

assertNotNull

判断给定的对象引用是否不为 null


2、数组断言
通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等

3、组合断言
assertAll 方法接受多个 org.junit.jupiter.api.Executable 函数式接口的实例作为要验证的断言,可以通过 lambda 表达式很容易的提供这些断言


4、异常断言
在JUnit4时期,想要测试方法的异常情况时,需要用@Rule注解的ExpectedException变量还是比较麻烦的。而JUnit5提供了一种新的断言方式Assertions.assertThrows() ,配合函数式编程就可以进行使用。

5、超时断言
Junit5还提供了Assertions.assertTimeout() 为测试方法设置了超时时间

6、快速失败
通过 fail 方法直接使得测试失败

4、前置条件(assumptions)
JUnit 5 中的前置条件(assumptions【假设】)类似于断言,不同之处在于不满足的断言会使得测试方法失败,而不满足的前置条件只会使得测试方法的执行终止。前置条件可以看成是测试方法执行的前提,当该前提不满足时,就没有继续执行的必要。
assumeTrue 和 assumFalse 确保给定的条件为 true 或 false,不满足条件会使得测试执行终止。assumingThat 的参数是表示条件的布尔值和对应的 Executable 接口的实现对象。只有条件满足时,Executable 对象才会被执行;当条件不满足时,测试执行并不会终止。

5、嵌套测试
JUnit 5 可以通过 Java 中的内部类和@Nested 注解实现嵌套测试,从而可以更好的把相关的测试方法组织在一起。在内部类中可以使用@BeforeEach 和@AfterEach 注解,而且嵌套的层次没有限制。


6、参数化测试
参数化测试是JUnit5很重要的一个新特性,它使得用不同的参数多次运行测试成为了可能,也为我们的单元测试带来许多便利。

利用@ValueSource等注解,指定入参,我们将可以使用不同的参数进行多次单元测试,而不需要每新增一个参数就新增一个单元测试,省去了很多冗余代码。

@ValueSource: 为参数化测试指定入参来源,支持八大基础类以及String类型,Class类型
@NullSource: 表示为参数化测试提供一个null的入参
@EnumSource: 表示为参数化测试提供一个枚举入参
@CsvFileSource:表示读取指定CSV文件内容作为参数化测试入参
@MethodSource:表示读取指定方法的返回值作为参数化测试入参(注意方法返回需要是一个流)

当然如果参数化测试仅仅只能做到指定普通的入参还达不到让我觉得惊艳的地步。让我真正感到他的强大之处的地方在于他可以支持外部的各类入参。如:CSV,YML,JSON 文件甚至方法的返回值也可以作为入参。只需要去实现ArgumentsProvider接口,任何外部文件都可以作为它的入参。

@ParameterizedTest

@ValueSource(strings = {"one", "two", "three"})

@DisplayName("参数化测试1")

public void parameterizedTest1(String string) {

System.out.println(string);

Assertions.assertTrue(StringUtils.isNotBlank(string));

}

@ParameterizedTest

@MethodSource("method") //指定方法名

@DisplayName("方法来源参数")

public void testWithExplicitLocalMethodSource(String name) {

System.out.println(name);

Assertions.assertNotNull(name);

}

static Stream<String> method() {

return Stream.of("apple", "banana");

}


7、迁移指南
在进行迁移的时候需要注意如下的变化:
●注解在 org.junit.jupiter.api 包中,断言在 org.junit.jupiter.api.Assertions 类中,前置条件在 org.junit.jupiter.api.Assumptions 类中。
●把@Before 和@After 替换成@BeforeEach 和@AfterEach。
●把@BeforeClass 和@AfterClass 替换成@BeforeAll 和@AfterAll。
●把@Ignore 替换成@Disabled。
●把@Category 替换成@Tag。
●把@RunWith、@Rule 和@ClassRule 替换成@ExtendWith。

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: spring-assistant-1.0.4 是一个开源的Java开发框架,用于构建企业级的Web应用程序。它基于Spring框架,并提供了很多额外的功能和扩展,以简化开发过程。 首先,spring-assistant-1.0.4 提供了一种简单而灵活的配置方式,可以轻松地集成到现有的Spring项目中。它提供了一些注解和配置类,帮助开发者更容易地定义和管理Bean的依赖关系。 其次,spring-assistant-1.0.4 还提供了很多常用功能的封装,例如数据库访问、事务管理、日志记录等。它支持多种数据库,包括MySQL、Oracle、PostgreSQL等,并提供了简单易用的API,使开发者能够更方便地进行数据库操作。 另外,spring-assistant-1.0.4 还支持AOP(面向切面编程),通过定义切面和切点,可以实现一些通用的横切关注点,例如日志记录、性能监控等。这样,开发者可以将这些关注点从业务逻辑中分离出来,提高代码的可维护性和重用性。 最后,spring-assistant-1.0.4 还集成了一些其他常用的开发工具,例如Spring Security(用于身份认证和授权)、Spring MVC(用于处理HTTP请求和响应)、Spring Data(用于简化数据访问)等。这些工具使得开发者能够更轻松地构建安全可靠、高效稳定的Web应用程序。 总之,spring-assistant-1.0.4 是一个功能强大、易用灵活的开发框架,可以帮助开发者快速构建企业级的Java Web应用。无论是小型项目还是大型项目,都可以从中受益,并提高开发效率和代码质量。 ### 回答2: spring-assistant-1.0.4是一个基于Spring框架的助手工具,旨在简化Spring应用程序的开发和管理。它提供了各种功能和工具,帮助开发人员更快速、更高效地构建和部署Spring应用。 首先,spring-assistant-1.0.4具有高度可扩展性,它允许开发人员轻松集成其他Spring相关的库和框架,如Spring BootSpring MVC等。这样可以更加灵活地配置和扩展应用程序,满足不同业务需求。 其次,spring-assistant-1.0.4提供了一套便捷的工具类和方法,可用于快速开发和管理Spring应用。例如,它提供了简化的配置管理功能,可以通过几行代码配置数据库连接、缓存、安全性等,减少了繁琐的配置过程。 此外,spring-assistant-1.0.4还提供了一套强大的AOP(面向切面编程)功能,用于实现各种横切关注点和交叉关注点的处理。开发人员可以通过配置切面,将一些通用的逻辑独立出来,减少重复代码的编写,提高代码复用性和可维护性。 最后,spring-assistant-1.0.4还支持自动化测试和部署。它提供了一套集成测试框架,可以方便地进行单元测试、集成测试和端到端测试等。同时,它还支持自动化部署工具,可以将应用程序打包成可执行文件,并进行快速部署和升级。 总之,spring-assistant-1.0.4是一个功能强大、易用性高的Spring助手工具,可以极大地提升开发人员的开发效率和应用程序的质量。无论是初学者还是有经验的开发人员,都可以受益于它的各种特性和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值