我正在运行一些 Selenium 测试,但无法访问我的测试方法的名称。 我想在日志中打印一些内容,例如“开始测试:foobarbaz”
我的所有测试类都继承一个公共(public)“AbstractTest”类,其中包含:
@Rule TestName name = new TestName();
@BeforeTest
public void testSetUp(){
System.out.println(name);
System.out.println(name.getMethodName());
}
但是输出是:
org.junit.rules.TestName@59f63e24
null
为什么 getMethodName() 方法返回 null?
我的 pom.xml 的摘录,可能有用......
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
最佳答案
正如评论中所述,该问题混合了 JUnit 4、JUnit Jupiter (JUnit 5) 和 TestNG,您可能只想关注其中一个。
在 JUnit Jupiter 中,可以通过 ExtensionContext
访问此信息。 。我不知道有一个内置扩展可以只打印它,但自己编写一个很容易:
public class NamePrinter implements BeforeEachCallback {
@Override
public void beforeEach(ExtensionContext extensionContext) throws Exception {
extensionContext.getTestMethod().ifPresent(m -> System.out.println(
"Running method: " + m.getName() +
" [display name: " + extensionContext.getDisplayName() + ")"));
}
}
然后您可以将其用作扩展:
@ExtendWith(NamePrinter.class)
public class MyClassTest {
@Test
public void someTest() {
System.out.println("This is a test");
}
}
关于java - JUnit getMethodName 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59495878/