在JUnit中获取测试用例名称有两种方法:
方法1:调用TestName的getMethodName方法
方法2:通过Thread类获取当前堆栈信息
具体示例如下:
父类:
package cskgnt.test;
import org.junit.Rule;
import org.junit.rules.TestName;
public class Father {
public String getFunctionName() {
return Thread.currentThread().getStackTrace()[2].getMethodName();
}
public String getClassName() {
return Thread.currentThread().getStackTrace()[2].getClassName();
}
@Rule
public TestName name = new TestName();
}
子类:
package cskgnt.test;
import org.junit.Test;
public class Son extends Father {
@Test
public void testCase() {
System.out.println("Method name: " + name.getMethodName());
System.out.println("Method name: " + getFunctionName());
System.out.println("Class name: " + getClassName());
}
}
运行结果如下:
Method name: testCase
Method name: testCase
Class name: cskgnt.test.Son
可以看出,方法1是JUnit特有的方法,且只能获取当前方法名,无法获取类名;方法2是java通用的方法,不仅限于JUnit,且可以获取完整类名、方法名,推荐方法2