2013-06-21 2 views
5

Ich möchte derzeit Testmethode in @Before ausführen, so dass ich die Annotation auf aktuell ausgeführten Methode angewendet werden kann.Erhalten Sie zur Zeit ausführen @ Test-Methode in @Before in JUnit 4

public class TestCaseExample { 
     @Before 
     public void setUp() { 
      // get current method here. 
     } 

     @Test 
     @MyAnnotation("id") 
     public void someTest { 
      // code 
     } 
}   
+0

Siehe http://stackoverflow.com/questions/473401/get-name-of-currently -executing-test-in-junit-4 für weitere Erläuterungen zu diesem Thema – centic

Antwort

8

Versuch Testname Regel

public class TestCaseExample { 
    @Rule 
    public TestName testName = new TestName(); 

    @Before 
    public void setUp() { 
    Method m = TestCaseExample.class.getMethod(testName.getMethodName());  
    ... 
    } 
    ... 
+0

Dieser Code gibt den Namen der aktuell ausgeführten Methode und mit dem Namen der Methode können wir keine Annotation darauf angewendet werden. Also ich will aktuelle Methode und dann möchte ich method.getAnnotation (MyAnnotation.class) – user2508111

+0

aufrufen Wenn Sie den Methodennamen haben, können Sie Reflexionen verwenden, um die tatsächliche Methode zu erhalten. –

+1

Noch besser, Sie können Ihre eigene Version von 'TestName' schreiben, die die Anmerkung statt den Namen ergreift. –

3

Evgeniy auf die TestName Regel hingewiesen (was ich noch nie gehört hatte - danke, Evgeniy). Anstatt es verwendet wird, schlage ich es als Modell für Ihre eigene Regel nehmen, die die Anmerkung von Interesse erfassen wird:

public class TestAnnotation extends TestWatcher { 
    public MyAnnotation annotation; 

    @Override 
    protected void starting(Description d) { 
     annotation = d.getAnnotation(MyAnnotation.class); 
    } 
} 
+0

Danke. Es ist auch nützlich. – user2508111