2009-07-01 37 views
9

我想在执行JUnit测试时做一些日志记录。在JUnit 3.X它总是容易获得当前正在运行的测试案例的名称,无论测试用例如何实例:如何在运行时获取JUnit 4中的测试用例名称?

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

在JUnit 4件事情似乎不那么容易。有没有人知道这个解决方案?是否有任何选项可以反映到当前的Runner实例中?

+3

似乎类似于: http://stackoverflow.com/questions/473401/get-name-of-currently-executing-test-in-junit-4 – 2009-07-01 19:40:45

回答

0

出了什么问题:

@Test 
public void foo() throws Exception() { 
    String testName = this.getName(); 
    // [...] do some stuff 
} 

+0

在JUnit 4的测试类不再延伸一个通用的框架类。所以没有更多的继承方法getName。 – mkoeller 2009-07-01 14:59:37

+0

好的。我仍然不明白`this.getName()的含义。它与this.getClass()。getName()有什么不同? (我找到了另一个答案) – 2009-07-01 15:51:41

10

在JUnit 4.7,你还可以得到当前执行的thest方法的名称登录时可能是很好

服用。从JUnit的4.7发行说明(阅读here at 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()); 
    } 
} 
4
public class FooTest { 
    @Rule 
    final public TestRule traceTestWatcher = new TestWatcher() { 
     @Override 
     protected void starting(Description d) { 
      System.out.println(d); 
     } 
    }; 

    @Test 
    public void testBar() { 
     ... 
    } 

    @Test 
    public void testBaz() { 
     ... 
    } 
} 
0

我知道这是旧的,但这里是我把在顶部的有用的(非JUnit的)方法我所有的测试。

public static void printTestName(){ 
    final StackTraceElement[] ste = new Throwable().getStackTrace(); 
    int buffer = 35 - ste[1].getMethodName().length(); 
    System.out.println("*******************************************************"); 
    System.out.println("*   TEST: " + ste[1].getMethodName() + getBuffer(buffer) + "*"); 
    System.out.println("*******************************************************"); 
} 

private static String getBuffer(int offset){ 
    StringBuilder buffer = new StringBuilder(""); 
    for(int i = 1; i < offset; i++){ 
     buffer.append(" "); 
    } 
    return buffer.toString(); 
} 
相关问题