如何在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
相关产品推荐
相关产品推荐

