Мой код автоматически получит имя класса и имя метода. Это поможет мне определить тестовый пример. Мой код выглядит следующим образомКак автоматизировать имя метода в JUnit?
final String CLASS_NAME = new Object() {
}.getClass().getName();
@Test
public void bigNumTest() {
final String METHOD_NAME = new Object() {
}.getClass().getEnclosingMethod().getName();
String testName = CLASS_NAME + "/" + METHOD_NAME + "\n the input is";
long bigNumber = 123456789l;
assertEquals(testName+bigNumber, CollatzConjectureLength.main(bigNumber), conjecture(bigNumber));
}
Однако это выглядеть занятым, так что я хочу скрыть автоматизации. , например.
@Test
public void bigNumTest(){
long bigNumber = 123456789l;
assertEqualsWithId(CollatzConjectureLength.main(bigNumber),conjecture(bigNumber))
}
Однако, я не могу назвать
final String METHOD_NAME = new Object() {
}.getClass().getEnclosingMethod().getName();
из другого метода
другое решение составляет от stackOverflow
public static String getMethodName(final int depth)
{
final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
//System. out.println(ste[ste.length-depth].getClassName()+"#"+ste[ste.length-depth].getMethodName());
// return ste[ste.length - depth].getMethodName(); //Wrong, fails for depth = 0
return ste[ste.length - 1 - depth].getMethodName(); //Thank you Tom Tresansky
}
Это решение может получил неправильное имя метода из-за глубокий вызов метода?
Есть ли лучшее решение?
я настоятельно рекомендую сделать в 'name' поле' final' – NamshubWriter