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?

¿Fue útil?

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:

introduce Descripción imagen aquí introducir descripción de la imagen aquí

.

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

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