如何在运行时在JUnit 4中获取测试用例名称?

mko*_*ler 9 java reflection junit

我想在执行JUnit测试时做一些日志记录.在JUnit 3.x中,无论实例化测试用例如何,总是很容易获得当前运行的测试用例的名称:

public void testFoo() throws Exception() {
  String testName = this.getName();
  // [...] do some stuff
}
Run Code Online (Sandbox Code Playgroud)

在JUnit 4中,事情似乎并不那么容易.有谁知道解决这个问题?是否有任何选项可以反映到当前的Runner实例中?

ssc*_*uth 10

在JUnit 4.7中,您还可以获取当前执行的最新方法的名称.记录时可能会很好.

摘自JUnit 4.7发行说明(在github上阅读):

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());
    }
}
Run Code Online (Sandbox Code Playgroud)


Grz*_*zki 5

好.我找到了另一种方法[在互联网上的某个地方](http://www.nabble.com/What-happened-to-getName () --td23456371.html):

    @RunWith(Interceptors.class) 
    public class NameTest { 
            @Interceptor public TestName name = new TestName(); 

            @Test public void funnyName() { 
                    assertEquals("funnyName", name.getMethodName()); 
            } 
    } 
Run Code Online (Sandbox Code Playgroud)