Pregunta

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

¿Fue útil?

Solución

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

Sería mucho más simple para usted 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 administrar es crear un perfil para la dependencia de 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: puede iniciar sus pruebas JUnit desde TestNG , pero creo que esto solo funciona para las pruebas JUnit 3.

Otros consejos

Forma oficial con seleccionando 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 de pruebas TestNG y JUnit en un módulo Maven & # 8211; Edición 2013

Enlace actual para esto en los ejemplos de plugin maven-surefire-plugin . Busque " Ejecución de TestNG y JUnit Tests " ;.

Deberá configurar el proveedor de testng para ignorar 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>

Tengo un mejor solución .

La idea es crear dos ejecuciones del maven-surefire-plugin , una para JUnit y otra para TestNG. Puede deshabilitar 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>

Hay otra salida para esto. También puede pedirle a TestNG que ejecute 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>

Gracias a este enlace ( http://jira.codehaus.org/browse/SUREFIRE-377 ) , aquí hay una solución a mi problema anterior (tener 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>

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>

De manera similar, use la dependencia de TestNG cuando sea necesario

Descubrí que la solución era forzar al complemento seguro para usar JUnit. Hice esto al anular el complemento surefire en el proyecto específico de la siguiente manera. La dependencia obliga a Surefire a usar 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>

Basado en soluciones anteriores. Encontré que esto funcionó mejor para nosotros. Otro problema al que nos enfrentábamos era que TestNG intentaba ejecutar pruebas JUnit antiguas. Lo evitamos 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>

Encontré una solución para ejecutar ambos tipos de prueba con TestNG sin cambiar la configuración de la herramienta de compilación.

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

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

El truco consiste en usar las anotaciones de ambos frameworks en las clases de prueba y usar las afirmaciones 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);
    }
}

Usando este truco, puedes ejecutar fácilmente pruebas JUnit existentes con TestNG, ayudándote a migrarlas cuando el tiempo lo permita.

¡Espero que ayude!

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 testng, ejecutará tanto las pruebas junit como las pruebas testng de una sola vez.
así que no hay restricciones para nombrar las pruebas.

versiones del complemento:
surefire-plugin 2.16 (junit47 y proveedores de prueba ambas versiones configuradas en 2.16)
Testng dependencia 6.8.7
dependencia de 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>
  

Que simplemente ejecutar: mvn test -Pjunit-tests (para ejecutar la prueba basada en junit) o ??mvn test -PtestNG-tests (para TestNG basado en la prueba).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top