本文地址:https://www.cnblogs.com/hchengmx/p/14883563.html

@DisplayName可以给 测试类 或者 测试方法来自定义显示的名称。可以支持 空格、特殊字符,甚至是 emoji。

1. @DisplayName

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; @DisplayName("A special test case")
public class DisplayNameTest { @Test
@DisplayName("Custom test name containing spaces")
void testWithDisplayNameContainingSpaces() {
} @Test
@DisplayName("╯°□°)╯")
void testWithDisplayNameContainingSpecialCharacters() {
} @Test
@DisplayName("")
void testWithDisplayNameContainingEmoji() {
}
}

output

2. @DisplayNameGenerator

DisplayNameGenerator 是一个接口,里面有三个方法。

String generateDisplayNameForClass(Class testClass);
String generateDisplayNameForNestedClass(Class nestedClass);

String generateDisplayNameForMethod(Class<?> testClass, Method testMethod);

DisplayNameGenerator Behavior Example
Standard 默认的,没什么变化 test_display_ok() -> test_display_ok()
Simple 针对没有参数的方法,去除掉尾部的括号 test_display_ok() -> test_display_ok
ReplaceUnderscores 把下划线 ‘_’ 替换成空格 test_display_ok() -> test display ok
IndicativeSentences class + method name test_diaplay_ok() -> DisplayNameGeneratorTest , test_diaplay_ok()
@DisplayNameGeneration(DisplayNameGenerator.IndicativeSentences.class)
public class DisplayNameGeneratorTest { @Test
public void test_display_ok(){ }
}

output

3. Parameterized Tests

对于 可参数化的测试,我们可以用 ParameterizedTest 来自定义设置 DisplayName,这种时候就不需要用 DisplayName或者 DisplayNameGenerator

package com.hchengmx.display;

import static org.junit.jupiter.params.provider.Arguments.arguments;

import java.util.stream.Stream;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource; public class DisplayNameParamTest { @ParameterizedTest(name = "#{index} - Test with {0} and {1}")
@MethodSource("argumentProvider")
void test_method_multi(String str, int length) {
} static Stream<Arguments> argumentProvider() {
return Stream.of(
arguments("abc", 3),
arguments("lemon", 2)
);
}
}

4. Custom DisplayNameGenerator

我们也可以 继承JUnit 的 DisplayNameGenerator 来实现自定义。比如,我们不想用DisplayName注解了,觉得这个不太直观,自定义了一个 TestCaseName的注解,用来标明Test Case的名称。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestCaseName {
String value();
}
import com.hchengmx.annotation.TestCaseName;
import java.lang.reflect.Method;
import org.junit.jupiter.api.DisplayNameGenerator; public class CustomDisplayNameGenerator extends DisplayNameGenerator.Standard { @Override
public String generateDisplayNameForClass(Class<?> testClass) {
return "New Name for test class";
} @Override
public String generateDisplayNameForNestedClass(Class<?> nestedClass) {
return super.generateDisplayNameForNestedClass(nestedClass);
} @Override
public String generateDisplayNameForMethod(Class<?> testClass, Method testMethod) {
if (testMethod.isAnnotationPresent(TestCaseName.class)) {
return testMethod.getAnnotation(TestCaseName.class).value();
}
return super.generateDisplayNameForMethod(testClass, testMethod);
}
}

source code

https://gitee.com/hchengmx/junit5-samples/tree/master/src/test/java/com/hchengmx/display


參考:

  1. JUnit 5 User Guide - Display Names
  2. DisplayName (JUnit 5.7.2 API)
  3. JUnit 5 Display Names - Mkyong.com

junit 5 - Display Name 展示名称的更多相关文章

  1. 创建几个常用table展示方式插件

    这次和大家分享的是自己写的一个table常用几种展示格式的js插件取名为(table-shenniu),样式使用的是bootstrap.min.css,还需要引用jquery.min.js包,这个插件 ...

  2. Java单元测试之JUnit 5快速上手

    前言 单元测试是软件开发中必不可少的一环,但是在平常开发中往往因为项目周期紧,工作量大而被选择忽略,这样往往导致软件问题层出不穷.线上出现的不少问题其实在有单元测试的情况下就可以及时发现和处理,因此培 ...

  3. 1.如何在JMeter中使用JUnit

    您是否需要在测试过程中使用JUnit? 要回答这个问题,我们先来看看单元测试. 单元测试是软件测试生命周期中测试的最低分辨率. 运行单元测试时,需要在应用程序中使用最小的可测试功能,将其与其他代码隔离 ...

  4. Salesforce LWC学习(十八) datatable展示 image

    本篇参看: https://developer.salesforce.com/docs/component-library/bundle/lightning-datatable/documentati ...

  5. 从PowerDesigner表字段的Name到EF实体类属性的Display Name(根据PowerDesigner生成EF实体类中文注释和验证元数据)

    第一步:将PowerDesigner表字段的中文Name填入Comment中:工具-Execute Commands-Edit/Run Script... '********************* ...

  6. Junit使用教程 转

    几乎所有程序员都听说过Junit的大名,但不知真正懂得运用它的人有多少,我便是其中的一个小白. 知道Junit是用来测试的,但却把“宝刀”当成了“菜刀”用.为了从此不再菜鸟,特此总结整理了下Junit ...

  7. Junit使用教程(一)

    几乎所有程序员都听说过Junit的大名,但不知真正懂得运用它的人有多少,我便是其中的一个小白. 知道Junit是用来测试的,但却把“宝刀”当成了“菜刀”用.为了从此不再菜鸟,特此总结整理了下Junit ...

  8. 【Ztree】前台展示多级菜单,后台配置方法

    第一步.前台HTML页面. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...

  9. JUnit 两日游

    从一个简单的Junit demo到一个用户名与密码的验证 学习Junit,首先肯定是要环境的搭建与配置. 第一步,安装JDK,配置环境变量 第二步,安装eclipse.OS X环境下,eclipse并 ...

随机推荐

  1. 【分享汇总】25个主题分享,360°领略OpenHarmony最新技术版图

    2021年10月,开放原子开源基金会旗下开源项目 OpenAtom OpenHarmony (以下简称"OpenHarmony") 应邀参加华为2021 HDC 开发者大会,并组织 ...

  2. vue 组件复用 - component

    vue 组件复用 - component vue 组件复用 就是对 component 标签的使用 先看图 下图看使用 结果: 可以看到 在箱包 这一项,我将banner 组件用了两次,我 每次 点击 ...

  3. 2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS)

    2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS) https://www.luogu.com.cn/problem/P2501 题意: 现在我们有一个长度为 n 的整 ...

  4. CoAP调试工具Mozi.IoT.CoAP应用详解

    前言 CoAP是一种类HTTP协议的物联网专用协议,其数据包为人类不可阅读的字节流形式,在开发相关应用的时候往往不能准确的了解数据包的内容.故需要专用的调试工具对数据和通讯进行调试.这篇文章是为了让开 ...

  5. Markdown学习-Typora

    author:涂勇军 标题 (#加一个空格)一级标题 (##加一个空格)二级标题 (###加一个空格)三级标题 (####加一个空格)四级标题 字体 加粗:** hello,World **(快捷键是 ...

  6. Java基础语法Day_04

    第11节 开发工具-IDEA day04_01_集成开发环境IDE的概述 day04_02_IntelliJ-IDEA的安装 day04_03_IDEA的项目结构 day04_04_IDEA的Hell ...

  7. sentinel基础概念及使用

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 什么是sentinel sentinel是Spring Cloud Al ...

  8. idea打开service窗口

  9. Java继承实例解析

    Java继承 前言 继承是面向对象语法的三大特征之一.继承可以降低代码编写的冗余度,提高编程的效率.通过继承,子类获得了父类的成员变量和方法.一个子类如何继承父类的字段和方法,如何修改从父类继承过来的 ...

  10. iNeuOS工业互联网操作系统,数据点、设备和业务的计算与预警

    目       录 1.      概述... 2 2.      概念解释... 2 3.      数据点的计算与预警... 2 4.      设备的计算与预警... 3 5.      业务的 ...