获取 JUnit 4 中当前正在执行的测试的名称JUnit 4.9.x 及更高版本JUnit 4.7.x - 4.8.x

2022-08-31 05:30:25

在 JUnit 3 中,我可以像这样获取当前正在运行的测试的名称:

public class MyTest extends TestCase
{
    public void testSomething()
    {
        System.out.println("Current test is " + getName());
        ...
    }
}

这将打印“当前测试是测试一些东西”。

在 JUnit 4 中是否有任何开箱即用或简单的方法来执行此操作?

背景:显然,我不想只打印测试的名称。我想加载存储在与测试同名的资源中的特定于测试的数据。你知道,约定胜过配置等等。


答案 1

JUnit 4.7添加了这个功能,它似乎使用TestName-Rule。看起来这将得到方法名称:

import org.junit.Rule;

public class NameRuleTest {
    @Rule public TestName name = new TestName();

    @Test public void testA() {
        assertEquals("testA", name.getMethodName());
    }

    @Test public void testB() {
        assertEquals("testB", name.getMethodName());
    }
}

答案 2

JUnit 4.9.x 及更高版本

从 JUnit 4.9 开始,TestWatchman 类已被弃用,取而代之的是 TestWatcher 类,该类具有调用:

@Rule
public TestRule watcher = new TestWatcher() {
   protected void starting(Description description) {
      System.out.println("Starting test: " + description.getMethodName());
   }
};

注: 必须声明包含类。public

JUnit 4.7.x - 4.8.x

以下方法将打印类中所有测试的方法名称:

@Rule
public MethodRule watchman = new TestWatchman() {
   public void starting(FrameworkMethod method) {
      System.out.println("Starting test: " + method.getName());
   }
};

推荐