我想使用junit 5和java在控制台中打印CustomDisplayNameGenerator值。
import org.junit.jupiter.api.DisplayNameGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Method;
public class CustomDisplayNameGenerator extends DisplayNameGenerator.Standard {
private static final Logger logger = LoggerFactory.getLogger(CustomDisplayNameGenerator.class);
@Override
public String generateDisplayNameForClass(Class<?> testClass) {
return replaceCamelCase(super.generateDisplayNameForClass(testClass));
}
@Override
public String generateDisplayNameForNestedClass(Class<?> nestedClass) {
return replaceCamelCase(super.generateDisplayNameForNestedClass(nestedClass));
}
@Override
public String generateDisplayNameForMethod(Class<?> testClass, Method testMethod) {
StringBuilder result = new StringBuilder();
result.append( "Test" + ";");
result.append( "Project" + "Test;");
result.append( "JIRA id" + "435345;");
return result.toString();
}
String replaceCamelCase(String camelCase) {
StringBuilder result = new StringBuilder();
result.append(camelCase.charAt(0));
for (int i = 1; i < camelCase.length(); i++) {
if (Character.isUpperCase(camelCase.charAt(i))) {
result.append(' ');
result.append(Character.toLowerCase(camelCase.charAt(i)));
} else {
result.append(camelCase.charAt(i));
}
}
return result.toString();
}
}
我不知道它是什么,我需要做进一步.有人可以帮助我请?这是代码到目前为止,我已经得到:
import Framework.Annotations.Common.*;
import org.junit.jupiter.api.*;
import java.lang.annotation.Annotation;
import static org.junit.jupiter.api.DisplayNameGenerator.getDisplayNameGenerator;
@DisplayNameGeneration(CustomDisplayNameGenerator.class)
public class JUnit5GeneratedExample {
@Test
void simpleTestExecution() {
Annotation displayNameGeneration = getClass().getAnnotation(DisplayNameGeneration.class);
if (displayNameGeneration != null) {
System.out.println(displayNameGeneration.toString());
DisplayNameGenerator name = getDisplayNameGenerator(DisplayNameGenerator.Standard.class);
System.out.println(name.generateDisplayNameForMethod(CustomDisplayNameGenerator.class, new Object(){}.getClass().getEnclosingMethod()));
}
System.out.printf("This is printed");
}
}
我正在尝试在控制台中打印下面突出显示的文本。是否有方法在控制台中打印CustomDisplayNameGenerator?
1条答案
按热度按时间iszxjhcz1#
代码看起来不错,只有一个小问题:
这一行将返回
DisplayNameGenerator.Standard
的一个示例,所以在你的例子中,你需要在这里使用你自己的类:另一方面,这与直接调用构造函数没有太大区别:
正如在评论中所讨论的,我找到了一个更好的解决方案:您可以定义一个自定义测试扩展来实现 BeforeTestExecutionCallback:
现在,您可以简单地使用
@ExtendWith(PrintTestNameBeforeEach.class)
注解任何测试类,并且所有方法都将被打印出来,如果您有自定义显示名称生成器的话。Ps:我写了一篇关于它的小文章,你可以在这里看到所有的步骤:https://medium.com/javarevisited/junit5-callbacks-in-less-than-3-minutes-55a87e000fcc