获取 JUnit 4 中当前正在执行的测试的名称

新手上路,请多包涵

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

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

这将打印“当前测试是 testSomething”。

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

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

原文由 Dave Ray 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 677
2 个回答

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());
    }
}

原文由 FroMage 发布,翻译遵循 CC BY-SA 3.0 许可协议

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());
   }
};

原文由 Duncan Jones 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题