2015-07-10 3 views
0

Мой код автоматически получит имя класса и имя метода. Это поможет мне определить тестовый пример. Мой код выглядит следующим образомКак автоматизировать имя метода в 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 
} 

Это решение может получил неправильное имя метода из-за глубокий вызов метода?

Есть ли лучшее решение?

ответ

4

Если вы используете JUnit 4.7 или выше, вы можете попробовать это:

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()); 
    } 
} 

скопировано отсюда: https://github.com/junit-team/junit/wiki/Rules#testname-rule

+1

я настоятельно рекомендую сделать в 'name' поле' final' – NamshubWriter

Смежные вопросы