You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JUnit 5中通过Java控制台打印CustomDisplayNameGenerator生成值

解决JUnit5自定义DisplayNameGenerator生成的名称无法控制台输出的问题

要输出通过CustomDisplayNameGenerator生成的自定义测试名称,直接用以下两种实用方案即可:

方案一:通过TestInfo注入直接获取(最简方式)

在测试方法里注入org.junit.jupiter.api.TestInfo对象,调用其getDisplayName()方法就能拿到生成的自定义名称,直接打印就行。

示例代码:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.junit.jupiter.api.DisplayNameGeneration;

@DisplayNameGeneration(CustomDisplayNameGenerator.class)
class JUnit5GeneratedExample {

    @Test
    void sampleTest(TestInfo testInfo) {
        // 打印生成的自定义显示名称
        System.out.println("生成的测试名称:" + testInfo.getDisplayName());
        // 你的测试逻辑...
    }
}

方案二:自定义Extension全局监听输出

如果需要给多个测试类统一处理名称输出,可以写一个自定义Extension,监听测试生命周期事件,在测试执行前自动打印名称。

1. 实现Extension类

import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
import org.junit.jupiter.api.extension.ExtensionContext;

public class DisplayNamePrinterExtension implements BeforeTestExecutionCallback {
    @Override
    public void beforeTestExecution(ExtensionContext context) {
        String generatedName = context.getDisplayName();
        System.out.println("待执行测试:" + generatedName);
    }
}

2. 注册Extension

  • 单测试类注册:在测试类上添加注解
@DisplayNameGeneration(CustomDisplayNameGenerator.class)
@ExtendWith(DisplayNamePrinterExtension.class)
class JUnit5GeneratedExample {
    // 测试方法...
}
  • 全局自动注册:在src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension文件中添加Extension的全类名
com.yourpackage.DisplayNamePrinterExtension

验证自定义生成器的正确性

确保你的CustomDisplayNameGenerator重写了正确的方法,比如:

import org.junit.jupiter.api.DisplayNameGenerator;
import java.lang.reflect.Method;

public class CustomDisplayNameGenerator extends DisplayNameGenerator.Standard {
    @Override
    public String generateDisplayNameForMethod(Class<?> testClass, Method testMethod) {
        return "Test;Project Test;JIRA id 435345;" + super.generateDisplayNameForMethod(testClass, testMethod);
    }
}

配置完成后运行测试,控制台就能看到生成的自定义显示名称了。

内容的提问来源于stack exchange,提问作者SeleniumUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:28:15