Frage

Um sie zusammen gibt es nur wenige Optionen zur Verfügung zu laufen, aber ich habe mit verschiedenen Profilen für JUnit und TestNG gewählt. Aber jetzt Problem ist, mit Ausnahme von und einschließlich Testfälle.

Da, wenn wir testng Abhängigkeit Hauptprojekt in Maven hinzufügen, werden sie alle Junit überspringen, habe ich beschlossen, es in eigenes Profil zu setzen. Also ich bin ohne TestNG Tests Standard (Haupt-) Profil von Kompilierung folgenden Eintrag in pom.xml mit:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.0.2</version>
        <configuration>
        <source>1.5</source>
        <target>1.5</target>
        <testExcludes>
            <testExclude>**/tests/**.*</testExclude>
            <testExclude>**/tests/utils/**.*</testExclude>
        </testExcludes>
    </configuration>
</plugin>

und gleiche für todsichere Plugin. So funktioniert es gut mit Hauptprofil und führt nur junit4 Tests. Aber wenn ich testng Profil ausführen, es wird nicht testng Test selbst es ihnen gewohnt kompilieren. Ich verwende folgendes Profil, um sie auszuführen.

<profile>
    <id>testNG</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                    <testIncludes>
                        <testInclude>**/tests/**.java</testInclude>
                        <testInclude>**/tests/utils/**.*</testInclude>
                    </testIncludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>false</skip>
                    <includes>
                        <include>**/**.class</include>
                        <include>**/tests/utils/**.class</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>5.8</version>
            <scope>test</scope>
            <classifier>jdk15</classifier>
        </dependency>
    </dependencies>
</profile>

Wer eine Idee hat, warum es sie nicht inklusive und Kompilieren wieder?

War es hilfreich?

Lösung

Die Konfiguration für die Compiler-Plugin schließt die TestNG-Typen. Die Konfiguration aus dem Profil wird mit der Standardkonfiguration verschmolzen, so dass Ihre effektive Compiler-Konfiguration lautet:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <source>1.5</source>
    <target>1.5</target>
    <testIncludes>
      <testInclude>**/tests/**.java</testInclude>
      <testInclude>**/tests/utils/**.*</testInclude>
    </testIncludes>
    <testExcludes>
      <testExclude>**/tests/**.*</testExclude>
      <testExclude>**/tests/utils/**.*</testExclude>
    </testExcludes>
  </configuration>
</plugin>

Das bedeutet, dass Ihre TestNG-Typen sind nicht immer kompiliert und werden daher nicht ausgeführt werden.

Wenn Sie die angeben Abschnitt im testng Profil wird die Standard ausschließt und Ihre TestNG Typen außer Kraft gesetzt werden kompiliert und ausgeführt werden. Ich kann mich nicht erinnern, wenn es mit einem leeren schließt Tag arbeiten (das heißt ), können Sie haben, so etwas geben die Standardkonfiguration, um sicherzustellen, wird außer Kraft gesetzt.

    <testExcludes>
      <testExclude>dummy</testExclude>
    </testExcludes>

Andere Tipps

Einfachste Lösung wie diese ist

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${surefire.version}</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>${surefire.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-testng</artifactId>
            <version>${surefire.version}</version>
        </dependency>
    </dependencies>
</plugin>

Weitere Informationen über diese: Misch TestNG und JUnit-Tests in einem Maven-Modul - Ausgabe 2013

Ich habe keine kombinierte Lösung online sowohl todsichere und Failsafe finden. Die POM-Datei Änderungen arbeiteten unten für mich.

  • Die todsichere Trick wird durch die explizite Angabe des Kind-Plugin für beide JUnit und TestNG getan.
  • Der Failsafe Trick wird durch die Definition von zwei Ausführungen, die jeweils mit einer leeren Konfiguration, einem für JUnit und die andere für TestNG getan.

Beide Lösungen sind Hacks, die ich online gefunden. Ich denke, dass der Link auf den todsicheren Trick in einer anderen Antwort auf diese Frage ist.

<plugins>
<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${surefire.version}</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>${surefire.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-testng</artifactId>
            <version>${surefire.version}</version>
        </dependency>
    </dependencies>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>${failsafe.version}</version>
    <executions>
        <execution>
            <id>test-testng</id>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
            <configuration>
                <testNGArtifactName>none:none</testNGArtifactName>
            </configuration>
        </execution>
        <execution>
            <id>test-junit</id>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
            <configuration>
                <junitArtifactName>none:none</junitArtifactName>
            </configuration>
        </execution>
    </executions>
</plugin>           
<!-- ... -->
</plugins>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top