Pregunta

Para ejecutar juntos hay pocas opciones disponibles, pero he elegido el uso de diferentes perfiles para Junit y TestNG. Pero ahora es un problema con excluyendo e incluyendo los casos de prueba.

Dado que si añadimos a la dependencia TestNG principal proyecto de Maven se saltará todas Junit, he decidido ponerlo en perfil separado. Así que estoy excluyendo pruebas TestNG en el perfil predeterminado (principal) de la compilación usando siguiente entrada en 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>

y lo mismo para el plugin de éxito seguro. Por lo que funciona bien con el perfil principal y ejecuta pruebas sólo junit4. Pero cuando se utiliza perfil TestNG no lo puedo ejecutar pruebas TestNG aun no lo puedo compilar ellos. Estoy usando siguiente perfil para su ejecución.

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

Alguien tiene alguna idea de por qué no está incluyendo la compilación de ellos y otra vez?

¿Fue útil?

Solución

La configuración para el plugin compilador excluye los tipos TestNG. La configuración del perfil se fusionó con la configuración por defecto, por lo que la configuración del compilador es efectiva:

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

Esto significa que sus tipos TestNG no se compilan cada vez y por lo tanto no se ejecutan.

Si especifica los excluye <> en el perfil TestNG prevalecerá sobre las excluye por defecto y sus tipos TestNG será compilada y ejecutada. No puedo recordar si va a trabajar con una etiqueta excluye vacía (es decir, excluye ), puede que tenga que especificar algo como esto para asegurar la configuración por defecto es anulado.

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

Otros consejos

solución más simple es como este

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

Más información sobre este: Mezcla pruebas nofollow TestNG y JUnit en un módulo Maven - edición 2013

no he encontrado ninguna solución combinada en línea para ambos de éxito seguro ya prueba de fallos. Los cambios en los archivos POM continuación trabajaron para mí.

  • El truco de éxito seguro, se especifica explícitamente el plugin niño tanto para JUnit y TestNG.
  • El truco a prueba de fallos se realiza mediante la definición de dos ejecuciones, cada uno con una configuración de vacío, uno para JUnit y el otro para TestNG.

Las dos soluciones son hacks que he encontrado en línea. Creo que el vínculo con el truco de éxito seguro es en otra respuesta a esta pregunta.

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top