2013-06-21 10 views
5

Chcę uzyskać aktualnie wykonywaną metodę testową w @Before, dzięki czemu mogę uzyskać adnotację zastosowaną do aktualnie wykonywanej metody.Wykonaj aktualnie wykonywaną metodę @Test w @Before w JUnit 4

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

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

Zobacz http://stackoverflow.com/questions/473401/get-name-of-currently -executing-test-in-junit-4 po więcej dyskusji na ten temat – centic

Odpowiedz

8

reguła TestName try

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

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

Ten kod podaje nazwę aktualnie wykonywanej metody i nazwę metody, do której nie można uzyskać adnotacji. Tak więc chcę rzeczywistej metody, a następnie chcę wywołać method.getAnnotation (MyAnnotation.class) – user2508111

+0

Jeśli masz nazwę metody można użyć odbić, aby uzyskać właściwą metodę. –

+1

Co więcej, można napisać własną wersję 'TestName', która pobiera adnotację, a nie nazwę. –

3

Jewgienij wskazał na TestName reguły (który nigdy nie słyszał - dzięki, Jewgienij). Zamiast używać go, proponuję biorąc go jako wzór dla własnego przepisu, który przechwyci adnotacji zainteresowania:

public class TestAnnotation extends TestWatcher { 
    public MyAnnotation annotation; 

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

Dzięki. Jest to również przydatne. – user2508111