2012-05-02 5 views
13
andernfalls

Das sind meine TestfälleStopp JUnit-Test in @Before Verfahren ohne

class Mother { 

    @Before 
    public void setUp() { 
     if (!this.getClass().isAnnotatedWith("Version20")) { // pseudo code 
      /* 
      * stop this test without failing! 
      */ 
     } 

     // further setup 
    } 
} 


@Version20 
class Child extends Mother { 

    @Test 
    public void test() { 
     // run only when Version == 20 
    } 
} 

Ist es möglich, den Test in Kind in der @Before Methode der Mutter zu stoppen, ohne versagen oder assertTrue (false)?

bearbeiten: Ich habe mehr Versionen @ Version19, @ Version18 usw. Meine Software liest eine Konfigurationsdatei und gibt das Ergebnis aus Einige Tests sind nur für spezielle Versionen gültig. Ich mag nicht die Versionsprüfung im Testverfahren machen, weil ich eine Menge von kleinen Tests habe und Code-Duplizierung nicht

+4

Warum nicht einfach Verwenden Sie '@ ignore', wenn Sie die Tests trotzdem kommentieren wollen? – weltraumpirat

+0

Wie fügt man den Check für Version20 innerhalb der Testmethode hinzu? –

+0

mögliches Duplikat von [Bedingt ignorierende Tests in JUnit 4] (http://stackoverflow.com/questions/1689242/conditional-ignoring-tests-in-junit-4) – oers

Antwort

17

wie bat ich ein similar question zuvor - das Ergebnis war, dass Sie die Assume Klasse verwenden können, 'Methoden zum Deaktivieren eines Tests auf der Basis einer Laufzeit überprüfen (während @Ignore ist eine statische Bedingung).

Das heißt, wenn Sie immer deaktivieren sie basierend auf einer bestimmten Annotation, es scheint, dass Sie dies tatsächlich zur Laufzeit nicht tun müssen. Einfach die Klassen mit @Ignore sowie @Version20 annotieren, würde die Arbeit tun, und wäre wohl klarer.

Obwohl ich vermute, Sie könnten nur ignorieren, wenn der Test in „1.0 Modus“ läuft - in diesem Fall ist es eine Laufzeit Innerlichkeit ist, und man kann dies wie mit etwas tun:

@Before 
public void setUp() { 
    if (!this.getClass().isAnnotatedWith("Version20")) { 
     final String version = System.getProperty("my.app.test.version"); 
     org.junit.Assume.assumeTrue(version.equals("2.0")); 
    } 
} 
+0

Danke, genau wonach ich gesucht habe! –