我想在执行JUnit测试时做一些日志记录。在JUnit 3.x中,无论测试用例如何实例化,总是很容易获得当前运行的测试用例的名称:
public void testFoo() throws Exception() {
String testName = this.getName();
// [...] do some stuff
}
在JUnit 4中,事情似乎并不那么容易。有谁知道解决这个问题?是否有任何选项可以反映到当前的Runner实例中?
答案 0 :(得分:10)
在JUnit 4.7中,您还可以获取当前执行的最佳方法的名称。记录时可能会很好。
取自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());
}
}
答案 1 :(得分: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());
}
}
答案 2 :(得分: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() {
...
}
}
答案 3 :(得分:0)
出了什么问题:
@Test
public void foo() throws Exception() {
String testName = this.getName();
// [...] do some stuff
}
答案 4 :(得分: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();
}