what unit test stands reports plugin for does are annotation unit-testing maven-2 testng junit4 maven-surefire-plugin

unit testing - stands - ¿Cómo ejecutar las pruebas JUnit y TestNG en el mismo proyecto usando maven-surefire-plugin?



surefire reports are in (12)

En este momento tengo ambos tipos de pruebas, pero cuando digo "prueba mvn" solo ejecuta pruebas TestNG y no Junit. Quiero ejecutar ambos uno tras otro. Alguna idea ?


Manera oficial de seleccionar proveedores .

También puede especificar múltiples proveedores como dependencias, y todos se ejecutarán y generarán un informe común . Esto puede ser especialmente útil con proveedores externos, ya que hay pocos casos de uso para combinar los proveedores incluidos.

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

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

Enlace actual para esto en los ejemplos de maven-surefire-plugin . Busque " Ejecutar Pruebas TestNG y JUnit ".

Deberá configurar el proveedor de pruebas para que ignore las pruebas junit de la siguiente manera:

<plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <properties> <property> <name>junit</name> <value>false</value> </property> </properties> </configuration> [...providers as dependecies, see above...] </plugin>


Basado en soluciones previas. Encontré que esto funcionó mejor para nosotros. Un problema más al que nos enfrentamos fue a TestNG tratando de ejecutar antiguas pruebas JUnit. Evitamos esto nombrando todas las pruebas TestNG de manera diferente (por ejemplo, * TestNG.java). A continuación se muestra la configuración con dos ejecuciones de surefire-plugin.

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <testNGArtifactName>none:none</testNGArtifactName> <excludes> <exclude>**/*TestNG.java</exclude> </excludes> </configuration> <executions> <execution> <id>test-testng</id> <phase>test</phase> <goals> <goal>test</goal> </goals> <configuration> <junitArtifactName>none:none</junitArtifactName> <testNGArtifactName>org.testng:testng</testNGArtifactName> <includes> <include>**/*TestNG.java</include> </includes> <excludes> <exclude>**/*Test.java</exclude> </excludes> </configuration> </execution> </executions> </plugin>


Descubrí que la solución era forzar el uso seguro del plugin para usar JUnit. Hice esto anulando el plugin surefire en el proyecto específico de la siguiente manera. La dependencia obliga a utilizar JUnit.

<build> <plugins> <!-- force sure fire to use junit instead of testng --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.10</version> <dependencies> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit47</artifactId> <version>2.10</version> </dependency> </dependencies> </plugin> </plugins> </build>


Descubrí una solución para ejecutar ambos tipos de pruebas con TestNG sin cambiar la configuración de tu herramienta de compilación.

Probé con Gradle pero también debería trabajar con Maven.

Tenga en cuenta que esto ejecutará pruebas JUnit dentro de TestNG, pero no al revés.

El truco es usar las anotaciones de ambos frameworks en las clases de prueba y usar TestNG para la compatibilidad de JUnit.

import static org.testng.AssertJUnit.*; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @org.testng.annotations.Test public final class ApplicationTest { @org.testng.annotations.BeforeClass @BeforeClass public static void setup () {} @org.testng.annotations.AfterClass @AfterClass public static void cleanup () {} @Test public void json () throws IOException { assertTrue (true); } }

Con este truco, puede ejecutar fácilmente pruebas de JUnit existentes con TestNG, lo que le ayuda a migrarlas cuando el tiempo lo permita.

¡Espero eso ayude!


Gracias a este enlace ( http://jira.codehaus.org/browse/SUREFIRE-377 ), aquí hay una solución a mi problema anterior (teniendo 3 ejecuciones en lugar de 2)

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.10</version> <configuration> <testNGArtifactName>none:none</testNGArtifactName> </configuration> <executions> <execution> <phase>test</phase> <goals> <goal>test</goal> </goals> <configuration> <junitArtifactName>none:none</junitArtifactName> <testNGArtifactName>org.testng:testng</testNGArtifactName> </configuration> </execution> </executions> </plugin>


Hay otro camino para esto. También podría pedirle a TestNG que ejecute los casos de prueba de Junit. A continuación se muestra el ejemplo testng.xml para ejecutar todos los casos de prueba

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="TestAll"> <test name="junitTestCases" junit="true"> <packages> <package name="com.test.*" /> </packages> </test> <test name="testNGTestCases" > <packages> <package name="com.test.*" /> </packages> </test> </suite>


Hay un problema abierto para esto , por lo que no hay una forma elegante de hacerlo.

Sería mucho más simple para ti elegir un marco y seguir con él.

Editar: mi respuesta anterior no funciona porque no puede especificar dependencias en la ejecución. He intentado algunos enfoques, pero lo mejor que puedo hacer es crear un perfil para la dependencia TestNG para que pueda alternar entre las pruebas TestNG y JUnit, no parece haber un medio para ejecutar las pruebas TestNG y Junit 4 .

Otro punto a tener en cuenta: puedes ejecutar tus pruebas JUnit desde TestNG , pero creo que esto solo funciona para las pruebas JUnit 3.


Para JUnit ---

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <dependencies> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit47</artifactId> <version>2.19.1</version> </dependency> </dependencies>

Del mismo modo, use la dependencia de TestNG cuando sea necesario


Tengo una mejor solución .

La idea es crear dos ejecuciones de maven-surefire-plugin , una para JUnit, una para TestNG. Puede desactivar uno de TestNG o JUnit por ejecución especificando junitArtifactName o testNGArtifactName :

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <executions> <execution> <phase>test</phase> <goals> <goal>test</goal> </goals> <configuration> <testNGArtifactName>none:none</testNGArtifactName> </configuration> </execution> <execution> <id>test-testng</id> <phase>test</phase> <goals> <goal>test</goal> </goals> <configuration> <junitArtifactName>none:none</junitArtifactName> </configuration> </execution> </executions> </plugin>


para Junit esto resolvió mi problema

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <dependencies> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit47</artifactId> <version>2.19.1</version> </dependency> </dependencies>


si solo especifica el proveedor de prueba, ejecutará ambas pruebas junit y pruebas de prueba una sola vez.
por lo tanto, no hay restricciones para nombrar las pruebas.

versiones de complemento:
surefire-plugin 2.16 (proveedores junit47 y testng ambas versiones configuradas en 2.16)
testng dependencia 6.8.7
dependencia junit 4.7


<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <!-- ********* Skip Test for Success BUILD ******** --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.10</version> <configuration> <skip>true</skip> </configuration> </plugin> <!-- *********************************************** --> </plugins> </build> <profiles> <!-- ********** Profiles for run test cases ************ --> <!-- Profile for run JUnit test dependent tests --> <profile> <id>junit-tests</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.10</version> <configuration> <skip>false</skip> </configuration> <dependencies> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit47</artifactId> <version>2.10</version> </dependency> </dependencies> </plugin> </plugins> </build> </profile> <!-- Profile for run TestNG dependent tests --> <profile> <id>testNG-tests</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.10</version> <configuration> <skip>false</skip> </configuration> </plugin> </plugins> </build> </profile> <!-- ***************************************************** --> </profiles>

Simplemente ejecute: mvn test -Pjunit-tests (para la prueba de ejecución basada en junit) o ​​mvn test -PtestNG-tests (para prueba de TestNG).