Infalible no recoge Junit 4 pruebas
Pregunta
Por alguna razón no puedo conseguir Maven 2 plug-in de éxito seguro para ejecutar clase de prueba JUnit 4.
public class SimpleTest {
@org.junit.Test
public void simple() {
System.out.println("foo");
}
}
Sin embargo si cambio de esta clase para ser Junit-3 similares, tales como
public class SimpleTest extends junit.framework.TestCase {
public void testBar() {
System.out.println("bar");
}
@org.junit.Test
public void simple() {
System.out.println("foo");
}
}
A continuación, el fichero es ejecutado. Esto es lo que he hecho:
- verificado versión Maven: Apache Maven 2.2.1 (r801777; 2009-08-06 20: 16: 01 + 0100)
- verificados versión de éxito seguro: siguió este consejo
- verifica la versión de éxito seguro: comprueba frascos de éxito seguro en mi
~/.m2/repository/org/apache/maven/surefire
- todos ellos son ya sea la versión 2.4.2 o 2.4.3 - hecho un
mvn dependency:tree | grep junit
para asegurar que sólo dependen de la versión 4.7 junit
El módulo estoy teniendo este problema no tiene en JUnit 3 pruebas.
¿Hay algo más que me falta?
Solución
mvn -X
me ayudó a revelar lo siguiente:
...
[INFO] [surefire:test {execution: default-test}]
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.4.3:runtime (selected for runtime)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.4.3:runtime (selected for runtime)
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/apache/maven/surefire/surefire-booter/2.4.3/surefire-booter-2.4.3.jar
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.jar
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.testng:testng:jar:jdk15:5.8:test (selected for test)
[DEBUG] junit:junit:jar:3.8.1:test (selected for test)
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/testng/testng/5.8/testng-5.8-jdk15.jar
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] Retrieving parent-POM: org.apache.maven.surefire:surefire-providers:pom:2.4.3 for project: null:surefire-testng:jar:null from the repository.
[DEBUG] Adding managed dependencies for unknown:surefire-testng
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.4.3
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.4.3
[DEBUG] org.codehaus.plexus:plexus-utils:jar:1.5.1
[DEBUG] org.apache.maven.surefire:surefire-testng:jar:2.4.3:test (selected for test)
[DEBUG] org.apache.maven:maven-artifact:jar:2.0:test (selected for test)
[DEBUG] org.codehaus.plexus:plexus-utils:jar:1.0.4:test (selected for test)
[DEBUG] junit:junit:jar:3.8.1:test (selected for test)
[DEBUG] org.testng:testng:jar:jdk15:5.7:test (selected for test)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.4.3:test (selected for test)
...
[DEBUG] Test Classpath :
...
[DEBUG] /home/mindas/.m2/repository/junit/junit/4.7/junit-4.7.jar
Así que parece que el problema venía de tarro testng
requiere v3.8.1 JUnit. A pesar de que Test Classpath
se estableció que depender de JUnit 4, ya era demasiado tarde.
testng
dependencia se encuentra en mi POM:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.8</version>
<scope>test</scope>
<classifier>jdk15</classifier>
</dependency>
Inmediatamente después de haber descomentado, las pruebas comenzaron a ejecutar.
Las lecciones aprendidas:
-
mvn dependency:tree
no siempre es suficiente,mvn -X
es un amigo. - segura no está hecho para el cielo desarrollador (he dado cuenta de esto mientras se mira en el proyecto informa JIRA). Esto es especialmente cierto ya que no existen otras alternativas si se utiliza Maven.
Gracias a todos por su ayuda. Desafortunadamente, no hay manera de dividir los puntos de respuesta entre Pascal y Kaleb, pero el consejo de Kaleb utilizar mvn -X
me ayudó a ir en la dirección correcta respuesta apunta de manera correcta van a él.
Otros consejos
El plugin de éxito seguro se da cuenta de qué proveedor de JUnit se debe utilizar en base a la ruta de clase. Si hay varias versiones JUnit en la ruta de clase, puede corregir la ruta de clase para tener una sola versión de JUnit en la ruta de clase (como se mencionó anteriormente), o puede especificar explícitamente el proveedor que desea utilizar. Por ejemplo, especificando lo siguiente en sus padres (POM) fuerzas mediante el proveedor más reciente (por ejemplo, "SUREFIRE-junit47"):
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8</version>
<dependencies>
<!-- Force using the latest JUnit 47 provider -->
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.8</version>
</dependency>
</dependencies>
[...]
Nota sin embargo, que de éxito seguro 2.7 cambió la forma en que la determinación de la que se ejecutan las clases de pruebas unitarias. El nuevo comportamiento de éxito seguro cuando se utiliza 2.7 (o posterior) con JUnit 4 es que cualquier prueba sin una anotación de @test se saltará automáticamente. Esto puede ser grande si sólo tiene JUnit 4 pruebas de unidad, pero si usted tiene una combinación de JUnit 3 y 4 pruebas de unidad, utilizando el proveedor "-junit47 de éxito seguro" no funcionará correctamente. En estos casos, lo mejor es elegir de manera explícita el proveedor "segura-junit4":
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<!-- Use the older JUnit 4 provider -->
<artifactId>surefire-junit4</artifactId>
<version>2.8</version>
</dependency>
</dependencies>
[...]
No sé qué quiere decir con "no se puede ejecutar," pero ¿Le ayuda a establecer explícitamente la incluye utilizado por el maven-surefire-plugin
?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
Además, ¿experta ejecutan con la bandera -X
proporcionan ninguna información útil?
Una de las causas más posible puede ser este error (cerrado con "No fijará"): https://issues.apache.org/jira/browse/SUREFIRE-587
Breve resumen:. Las pruebas que se extienden TestCase (pero no utilizando anotaciones) no será recogido si su nombre no termina con la "prueba"
Por alguna pobre alma por ahí que se pregunta por qué Maven no recoge las pruebas JUnit.
Tengo tanto JUnit y TestNG como dependecies. Pero quiero a prueba de fallos para ejecutar mis pruebas funcionales utilizando TestNG y segura de manejar mi unidad de pruebas utilizando JUnit.
Sin embargo, me pareció que estaba tratando de éxito seguro para ejecutar mis pruebas unitarias utilizando TestNG y no encontraron nada para funcionar. se han omitido mis pruebas JUnit.
Más tarde me encontré con este Maven tema y configurado para ejecutarse sólo segura " JUnit" pruebas como esta:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<properties>
<property>
<name>junit</name>
<value>true</value>
</property>
</properties>
</configuration>
</plugin>
Espero que esto ayude a alguien.
Para el beneficio de los empleados de Google, cuando tuve este problema se debía a que había incluido una dependencia PowerMock que sacó en TestNG, sin causar [TestNG] pruebas para ser detectados por éxito seguro.
He utilizado el m2eclipse pestaña "Jerarquía de dependencia" del editor de POM para encontrar la dependencia y derecho clic para generar una exclusión (véase XML siguiente).
Para completar (y para aquellos que no utilizan m2eclipse) aquí está el código XML que excluye la dependencia - Sólo se encontró con esta característica de Maven al ver estas etiquetas generadas automáticamente:
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-mockito-release-full</artifactId>
<version>1.4.9</version>
<classifier>full</classifier>
<exclusions>
<exclusion>
<artifactId>powermock-module-testng</artifactId>
<groupId>org.powermock</groupId>
</exclusion>
</exclusions>
</dependency>
(En mi caso, excluyendo "powermock-módulo de TestNG" era suficiente, pero se puede excluir TestNG directamente si es que viene de otra parte.)
La verificación de que usted ha hecho son buenos, especialmente la comprobación de que está utilizando la versión 2.3 o superior del plugin segura (por defecto, obtendrá la versión 2.4.3 con Maven 2.1 super POM por lo que este debe ser aceptable) y comprobando que no tirando de la dependencia junit-3.8.1.jar
transitiva.
Ahora, sólo para validado que esto no es un "problema global" (Yo no lo creo TBH), se puede crear un proyecto desde cero, por ejemplo ejecutando:
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=maven-junit4-testcase
A continuación, actualice la dependencia junit:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
Y configurar el nivel de compilador para 1.5 +
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
Finalmente poner su SimpleTest.java
junto a AppTest.java
y ejecutar mvn test
.
Si se ejecuta mvn test
funciona bien para ese proyecto (y estoy esperando que se ejecute sin problemas), ¿podría por favor, actualice su pregunta con la configuración POM que está usando (a partir del proyecto teniendo problemas)?
Un pequeño cambio me ayudó Curiosamente !!!
He cambiado el nombre de la clase de MyClassTest a TestMyClass, Tengo esta idea después de veryfing mi padre pom.xml contiene debajo de la línea
<test.include.pattern> **/Test*.java <test.include.pattern/>
1.) Incluir siguiente plug-in de éxito seguro en pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
</configuration>
</plugin>
2.) Por el plugin segura por defecto recoge la clase de prueba del paquete: - src / test / java /....
Así que ir a Vía de construcción e incluyen carpeta de prueba en la ruta de clases, como a continuación:
.3) Ir a -> Ejecutar como -> Prueba de Maven
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.081
s - in com.bnym.dcm.api.controller.AccountControllerTest
[INFO] Running com.bnym.dcm.api.controller.DCMApiControllerTest
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s -
in com.bnym.dcm.api.controller.DCMApiControllerTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ----------------------------------------------------------------------
--
[INFO] BUILD SUCCESS
Tenía un problema similar cuando se trata de ejecutar las pruebas de integración. Tenía una versión antigua del plugin segura de lo que estaba tratando de ejecutar TestNG y no jUnit. He cambiado el número de versión en el pom a 2,20 y funcionó.
¿Ha configurado el experto-compilación-plugin para el nivel compilador correcta, como:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
De lo contrario experto tendrá problemas con las anotaciones