七、springboot 单元测试阶段 (2、JUnit5常用注解,3、断言(assertions) )

news/2024/5/19 6:14:11 标签: 单元测试, spring boot, 后端, JUnit5, 断言

 2、JUnit5常用注解

  JUnit5的注解与JUnit4的注解有所变化

JUnit 5 User Guide

  • @Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试
  • @ParameterizedTest :表示方法是参数化测试,下方会有详细介绍
  • @RepeatedTest :表示方法可重复执行,下方会有详细介绍
  • @DisplayName :为测试类或者测试方法设置展示名称
  • @Tag :表示单元测试类别,类似于JUnit4中的@Categories
  • @Disabled :表示测试类或测试方法不执行,类似于JUnit4中的@Ignore
  • @Timeout :表示测试方法运行如果超过了指定时间将会返回错误
  • @ExtendWith :为测试类或测试方法提供扩展类引用
import org.junit.jupiter.api.Test; //注意这里使用的是jupiter的Test注解!!
public class TestDemo {
  @Test
  @DisplayName("第一次测试")
  public void firstTest() {
      System.out.println("hello world");
  }

 3、断言(assertions)

断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法。JUnit 5 内置的断言可以分成如下几个类别:

检查业务逻辑返回的数据是否合理。

所有的测试运行结束以后,会有一个详细的测试报告;

  3.1、简单断言

用来对单个值进行简单的验证。如:

方法

说明

assertEquals

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

assertNotEquals

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

assertSame

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

assertNotSame

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

assertTrue

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

assertFalse

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

assertNull

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

assertNotNull

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

@Test
@DisplayName("simple assertion")
public void simple() {
     assertEquals(3, 1 + 2, "simple math");
     assertNotEquals(3, 1 + 1);

     assertNotSame(new Object(), new Object());
     Object obj = new Object();
     assertSame(obj, obj);

     assertFalse(1 > 2);
     assertTrue(1 < 2);

     assertNull(null);
     assertNotNull(new Object());
}

   3.2、数组断言

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

@Test
@DisplayName("array assertion")
public void array() {
 assertArrayEquals(new int[]{1, 2}, new int[] {1, 2});
}

   3.3、组合断言

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

@Test

@DisplayName("assert all")
public void all() {
 assertAll("Math",
    () -> assertEquals(2, 1 + 1),
    () -> assertTrue(1 > 0)
 );
}

   3.4、异常断言

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

@Test
@DisplayName("异常测试")
public void exceptionTest() {
    ArithmeticException exception = Assertions.assertThrows(
           //扔出断言异常
            ArithmeticException.class, () -> System.out.println(1 % 0));
}

   3.5、超时断言

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

@Test
@DisplayName("超时测试")
public void timeoutTest() {
    //如果测试方法时间超过1s将会异常
    Assertions.assertTimeout(Duration.ofMillis(1000), () -> Thread.sleep(500));
}

   3.6、快速失败

通过 fail 方法直接使得测试失败

@Test
@DisplayName("fail")
public void shouldFail() {
 fail("This should fail");
}

http://www.niftyadmin.cn/n/1712963.html

相关文章

七、springboot 单元测试阶段 (4、前置条件(assumptions)5、嵌套测试 6、参数化测试 7、迁移指南)

目录 4、前置条件&#xff08;assumptions&#xff09; 5、嵌套测试 6、参数化测试 7、迁移指南 4、前置条件&#xff08;assumptions&#xff09; JUnit 5 中的前置条件&#xff08;assumptions【假设】&#xff09;类似于断言&#xff0c;不同之处在于不满足的断言会使得测…

八. springboot 的指标监控 (1.SpringBoot Actuator 2.Actuator Endpoint)

目录 1、SpringBoot Actuator 1.1、简介 1.2、1.x与2.x的不同 1.3、如何使用 1.4、可视化 2、Actuator Endpoint 2.1、最常使用的端点 2.2、Health Endpoint 2.3、Metrics Endpoint 2.4、管理Endpoints 2.4.1、开启与禁用Endpoints 2.4.2、暴露Endpoints 1、SpringBoot Actua…

Occlusion

简介&#xff1b; 遮挡剔除&#xff1a;剔除视椎体内被其他游戏对象所遮住的物体 静态物体的遮挡剔除&#xff1a; 将需要自动遮挡的对象勾选 为Occluder Static/Occludee Static&#xff0c;然后在 Occlusion 中进行简单的设置 Bake 即可。最后可以在 Visualization 模式下…

八. springboot 的指标监控 (3、定制 Endpoint )

3、定制 Endpoint 3.1、定制 Health 信息 import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; Component public class MyHealthIndicator implemen…

字符编码笔记

ASCII码&#xff1a;一个英文字母&#xff08;不分大小写&#xff09;占一个字节的空间&#xff0c;一个中文汉字占两个字节的空间。一个二进制数字序列&#xff0c;在计算机中作为一个数字单元&#xff0c;一般为8位二进制数&#xff0c;换算为十进制。最小值-128&#xff0c;…

unity中so文件的导出及其使用

1、在unity中的使用 在 Assets下创建Plugins/Android文件夹&#xff0c;里面可以区分arm64-v8a&#xff0c;armeabi-v7a&#xff0c;x86针对Android各个平台的so文件 2、各个平台的区别 armv7架构---是arm的32位 armv8架构-----是arm的64位 x86指令是很早的指令集 Android…

Unity中路径的使用

1、Resources文件夹&#xff1a;里面文件会原封不动的达到apk包中&#xff0c;其中的文件可以读&#xff0c;写 StreamingAssets文件夹&#xff1a;里面文件会原封不动的达到apk包中&#xff0c;其中的文件可以读&#xff0c;不能写入 persistentDataPath文件夹&#xff1a;路…

线段相交算法

在判断线段的相交时我们可以利用向量的叉积。当两条向量在一条直线上时&#xff0c;向量的叉积等于 0 &#xff0c;即上面的第二种情况&#xff0c;所以判断两条线段相交就分为两种情况讨论&#xff1a;1.向量的叉积不等于 0 &#xff1b;2.向量的叉积等于 0 。 一.叉积不等于…