Domanda

Per eseguire insieme ci sono poche opzioni disponibili, ma ho scelto utilizzando profili diversi per Junit e TestNG. Ma ora problema è con esclusione e compresi i casi di test.

Dal momento che se aggiungiamo TestNG dipendenza progetto principale in Maven si salta tutto Junit, ho deciso di metterlo in profilo separato. Quindi io escludo test TestNG inadempiente profilo (principale) da compilare utilizzando seguente voce pom.xml:

<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>

e lo stesso per il plugin infallibile. Così funziona bene con profilo principale ed esegue i test solo Junit4. Ma quando uso il profilo TestNG è solito eseguire test di TestNG anche non ci vorrà loro compilazione. Sto usando seguente profilo per eseguirli.

<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>

Qualcuno ha idea del perché non è compreso loro e la compilazione di nuovo?

È stato utile?

Soluzione

La configurazione del plugin compilatore esclude i tipi TestNG. La configurazione del profilo è fusa con la configurazione di default, quindi la configurazione del compilatore efficace è:

<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>

Questo significa che i tipi TestNG non sono mai compilati e quindi non vengono eseguiti.

Se si specifica il sezione nel TestNG profilo avrà la precedenza esclude default e i tipi di TestNG verrà compilato ed eseguito. Non riesco a ricordare se funzionerà con un tag esclude vuota (ossia ), potrebbe essere necessario specificare qualcosa di simile per garantire la configurazione di default viene ignorata.

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

Altri suggerimenti

soluzione più semplice è come questo

<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>

Più informazioni su questo: miscelazione test TestNG e JUnit in un modulo Maven - edizione 2013

Non ho trovato alcuna soluzione combinata in linea sia infallibile e fail-safe. Le modifiche apportate ai file POM seguito lavorato per me.

  • Il trucco infallibile è fatto specificando esplicitamente il plugin bambino sia per JUnit e TestNG.
  • Il trucco Failsafe avviene definendo due esecuzioni, ciascuno con una configurazione vuota, una per JUnit e l'altra per TestNG.

Entrambe le soluzioni sono hack che ho trovato on-line. Credo che il link per il trucco Surefire è in un'altra risposta a questa domanda.

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top