为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕丝7291255 2019-10-06 10:55:04
在JUnit 3中,我可以这样获得当前正在运行的测试的名称:public class MyTest extends TestCase{    public void testSomething()    {        System.out.println("Current test is " + getName());        ...    }}它将显示“当前测试为testSomething”。在JUnit 4中是否有任何现成的或简单的方法可以做到这一点?背景:显然,我不想只打印测试的名称。我想加载存储在与测试名称相同的资源中的特定于测试的数据。您知道,约定优于配置及所有其他。
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超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());

    }

}


查看完整回答
反对 回复 2019-10-06
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

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

   }

};


查看完整回答
反对 回复 2019-10-06
?
米脂

TA贡献1836条经验 获得超3个赞

JUnit 5及更高版本

在JUnit 5中,您可以注入TestInfo,从而简化了提供给测试方法的测试元数据。例如:


@Test

@DisplayName("This is my test")

@Tag("It is my tag")

void test1(TestInfo testInfo) {

    assertEquals("This is my test", testInfo.getDisplayName());

    assertTrue(testInfo.getTags().contains("It is my tag"));

}


查看完整回答
反对 回复 2019-10-06
  • 3 回答
  • 0 关注
  • 1140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信