java - How to automate the method name in JUnit? -


my code auto classname , method name. helps me identify test case. code this

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 input is";      long bignumber = 123456789l;     assertequals(testname+bignumber, collatzconjecturelength.main(bignumber), conjecture(bignumber));  } 

however, it's busy wanna hide automation. e.g.

@test  public void bignumtest(){   long bignumber = 123456789l;  assertequalswithid(collatzconjecturelength.main(bignumber),conjecture(bignumber)) } 

however, cannot call

 final string method_name = new object() {         }.getclass().getenclosingmethod().getname(); 

from other method

the other solution 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 depth = 0   return ste[ste.length - 1 - depth].getmethodname(); //thank tom tresansky } 

this solution may got wrong method name due deep of method call?

is there better solution?

if using junit 4.7 or above try this:

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

copied here: https://github.com/junit-team/junit/wiki/rules#testname-rule


Comments