junit 5 - Display Name 展示名称
本文地址: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
參考:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码