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
Post a Comment