2010-01-18 8 views
8

ich folgenden Tests Struktur haben:Lauftests von inneren Klassen über Maven

public class WorkerServiceTest { 

    public class RaiseErrorTest extends AbstractDbUnitTest{ 
     @Test 
     public void testSomething(){ 
     } 

     ... 
    } 

    ... 
} 

Es getan, weil ich nicht will eine eigene Klasse-Datei für jeden Testfall erstellen AbstractDbUnitTest erstreckt.

Das Problem ist, dass mvn test Test nicht von meiner inneren Klasse ausgeführt wird. Gibt es eine Möglichkeit, wie man Maven konfiguriert, um solche Tests durchzuführen? Natürlich kann ich Methoden in der Elternklasse erstellen, die die inneren Klassenmethoden aufrufen, aber ich möchte einen klareren Weg.

Antwort

9

Ja, das ist möglich mit dem neuen (nun, es ist nicht mehr neu) Enclosed Läufer (seit JUnit 4.5), dass alle statischen inneren Klassen einer äußeren Klasse ausgeführt wird.

Um es zu verwenden, nur die äußere Klasse mit @RunWith(Enclosed.class) annotieren und die inneren Klassen statisch machen.

@RunWith(Enclosed.class) 
public class WorkerServiceTest { 

    public static class RaiseErrorTest extends AbstractDbUnitTest{ 
     @Test 
     public void testSomething(){ 
     } 

     ... 
    } 

    ... 
} 

Und mvn test wird sie ausführen.

+0

Ich versuche dies mit Maven 3.0.4 und Junit 4.11 und immer noch nicht funktioniert Von Eclipse funktioniert das ganz gut, aber nicht mit 'mvn test'. Irgendwelche Ideen? – Chirlo

+0

Was funktioniert für mich, war die Konfiguration der "Maven-todsichere-Plugin" ... Ich habe die folgende Konfiguration zu ändern: ' ' Einzelheiten bei [hier] (http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html) –

+0

@CarlitosWay Können Sie einige Details angeben, wird es nicht in Ihrem Kommentar angezeigt. Ich habe versucht, die src/main/java, und das funktioniert immer noch nicht. Vielen Dank. –

4

ich erklären (etwas mehr) die Lösung, die ich gefunden ...

Maven (AFAIK) standardmäßig verwendet das Plugin "Maven-todsichere-Plugin" alle Tests an Ihrem Maven Projekt definiert auszuführen. Laut der documentation dieses Plugins, schließt es standardmäßig Tests aus, die in inneren statischen Klassen eingeschlossen sind (oder zumindest war es mit der Version, die ich verwende - 2.18.1).

Also was ich getan habe, war eine leere Ausschlussregel zu setzen; Ergebnis mit einem Pom Build-Abschnitt wie folgt:

<build> 
    <plugins> 
    ... 
    <!-- ~~~~~~~~~~ SUREFIRE --> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.18.1</version> 
     <configuration> 
     <excludes> 
      <exclude></exclude> 
     </excludes> 
     </configuration> 
    </plugin> 
    ... 
    </plugins> 
</build> 
+0

Das hat funktioniert !!! Ich habe todsicher 2.19 benutzt, aber ich bezweifle, dass das ein Problem war. Ich musste natürlich das Testquellverzeichnis ändern. Vielen Dank. –

+0

Genauer gesagt finden Sie die Dokumentation im Abschnitt [includes] (http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#includes). Obwohl ich denke, dass der bevorzugte Weg wäre, den 'Enclosed' Läufer stattdessen zu verwenden. – Brice

Verwandte Themen