java - JUnit getMethodName 返回 null

标签 java maven selenium junit junit-rule

我正在运行一些 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/

相关文章:

java - Android 2.3.3,使选项卡列表可滚动?

java - 在java : possible?中手动触发CPU缓存写回有必要吗?

java - maven 和 spring 应用程序部署错误 : Unable to locate NamespaceHandler for namespace [http://www. springframework.org/schema/context]

java - eclipse + GAE : Properties changes and therefor problems with deploy

java - 当应用程序切换到新方法时 Firefox 崩溃

java - 通过反射将基类转换为派生类

java - 每个对话 session 的好处是什么?

maven - ged 从 maven 命令行将测试用例作为参数传递

python - Selenium 找不到元素

javascript - 如何使用 Selenium 和 Python 抓取传单 map 多边形