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

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


public class MyTest extends TestCase

{

    public void testSomething()

    {

        System.out.println("Current test is " + getName());

        ...

    }

}

它将显示“当前测试为testSomething”。


在JUnit 4中是否有任何现成的或简单的方法可以做到这一点?


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


慕丝7291255
浏览 1145回答 3
3回答

慕尼黑5688855

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

慕桂英546537

JUnit 4.9.x及更高版本从JUnit 4.9开始,TestWatchman不推荐使用TestWatcher该类,而推荐使用该类:@Rulepublic TestRule watcher = new TestWatcher() {   protected void starting(Description description) {      System.out.println("Starting test: " + description.getMethodName());   }};注意:必须声明包含类public。JUnit 4.7.x-4.8.x以下方法将打印类中所有测试的方法名称:@Rulepublic MethodRule watchman = new TestWatchman() {   public void starting(FrameworkMethod method) {      System.out.println("Starting test: " + method.getName());   }};

米脂

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"));}
打开App,查看更多内容
随时随地看视频慕课网APP