Pregunta

No puedo ejecutar Powermock a través de maven.Soy PowerMock Mockito y PowerMockRunner para realizar una prueba jUnit.

Aquí está la prueba:

@RunWith(PowerMockRunner.class)
@PrepareForTest( { UserLocalServiceUtil.class, ExpandoBridge.class })
public class AlertNotificationsTest {
//...

No he configurado nada especial para ejecutar la prueba.Mi pom hace referencia a los siguientes departamentos:

  • org.mockito | Mockito-all | 1.8.0
  • Junit | Junit | 4.6.0
  • org.powermock.modules | powermock-module-junit4 | 1.3.1
  • org.powermock.api | powermock-api-mockito | 1.3.1

cuando corro mvn -Dtest=AlertNotificationsTest test mvn dice que no hay ninguna prueba que ejecutar.Pero si ejecuto la misma clase de prueba desde eclipse, todo funciona bien.

¿Estoy haciendo algo mal?


Aquí está mi pom.xml a continuación (las partes relevantes)

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>5.9</version>
        <classifier>jdk15</classifier>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.6</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.8.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock.modules</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>1.3.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock.api</groupId>
        <artifactId>powermock-api-mockito</artifactId>
        <version>1.3.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Aquí está el resultado de maven

mvn -Dtest=Prueba de prueba de notificaciones de alerta

...
[INFO] Surefire report directory: C:\Devel\Java\EP_PORTAL\information-provider\target\surefi

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestSuite
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.313 sec

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] No tests were executed!  (Set -DfailIfNoTests=false to ignore this error.)
[INFO] ------------------------------------------------------------------------

Nota:Puedo ejecutar otras pruebas, pero no puedo ejecutar esta prueba.si hago el AlertNotificationsTest extensión de clase junit.framework.TestCase la clase es recogida por maven, pero parece que no es impulsada por PowerMockRunner.

Aquí está el resultado de eso:


Running TestSuite
[ERROR]: No test suite found.  Nothing to run
Tests run: 4, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 1.053 sec <<< FAILURE!

Results :

Failed tests:
  testSingleEventNotification(pt.estradasportugal.traffic.services.events.AlertNotificationsTest)
  testTwoEventNotification(pt.estradasportugal.traffic.services.events.AlertNotificationsTest)

Tests run: 4, Failures: 2, Errors: 0, Skipped: 0

Nuevamente, estas pruebas funcionan bien con Eclipse.


Actualizar Encontré un posible problema y una solución alternativa.Tengo pruebas con TestNG y JUnit.Si elimino TestNG de mi pom y migro todas mis pruebas a JUnit, puedo ejecutar mi prueba PowerMock con mvn test.Entonces parece que hay un problema con maven y el combo junit/testng.

Me gustaría poder ejecutar ambos, pero si no encuentro la manera, responderé mi propia pregunta.Gracias chicos y chicas

¿Fue útil?

Solución 7

Hubo un problema al mezclar las pruebas TestNG y JUnit.Migrar todas las pruebas a Junit resolvió mi problema.Gracias chicos.

Otros consejos

Acabo de recibir este error y busqué la solución.Mi archivo pom.xml tenía la siguiente dependencia:

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-mockito-release-full</artifactId>
  <version>1.5</version>
  <classifier>full</classifier>
  <scope>test</scope>
</dependency>

El problema proviene del hecho de que mi código usa JUnit y la dependencia anterior tiene una dependencia externa de TestNG.Esto estaba impidiendo que se ejecutara mi prueba.Por qué no lo sé: ¡habrías pensado que un marco de prueba se habría probado un poco mejor!

De todos modos, la solución fue dividir las dependencias "completas" solo en aquellas necesarias:

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-api-mockito</artifactId>
  <version>1.5</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-core</artifactId>
  <version>1.5</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-module-junit4</artifactId>
  <version>1.5</version>
  <scope>test</scope>
</dependency>

Eso lo resolvió.Por cierto, usé mvn dependency:tree para comprender las dependencias asociadas.

No puedo reproducir tu problema.Con el siguiente contenido en mi pom.xml:

  <repositories>
    <repository>
      <id>powermock-repo</id>
      <url>http://powermock.googlecode.com/svn/repo/</url>
    </repository>
  </repositories>
  <properties>
    <powermock.version>1.3.1</powermock.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.powermock.modules</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.powermock.api</groupId>
      <artifactId>powermock-api-mockito</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.6</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <version>1.8.0</version>
    </dependency>
  </dependencies>

Y la siguiente clase de prueba (omitiendo las importaciones):

@RunWith(PowerMockRunner.class)
@PrepareForTest( { App.class })
public class AppTest {
    @Test
    public void testApp() {
        assertTrue(true);
    }
}

Correr mvn test -Dtest=AppTest simplemente funciona bien y dame el siguiente resultado:

...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.135 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Wed Nov 25 17:34:32 CET 2009
[INFO] Final Memory: 9M/79M
[INFO] ------------------------------------------------------------------------

Entonces la pregunta es:¿Tienes un método anotado con? @Test en AlertNotificationsTest?

También encontré este problema, pero no es un problema de PowerMock.Mi clase de prueba se llamó XStaticTests.java.

Cuando ejecuto "mvn clean test", esta prueba no se ejecutó, solo se ejecutó cuando especifiqué la prueba usando "-Dtest=..."

La documentación infalible menciona que, de forma predeterminada, solo se buscan estos patrones:"/Test*.java" - incluye todos sus subdirectorios y todos los nombres de archivos java que comienzan con "Test"."/Test.java": incluye todos sus subdirectorios y todos los nombres de archivos java que terminan en "Test"."*/*TestCase.java" - incluye todos sus subdirectorios y todos los nombres de archivos java que terminan en "TestCase".

Por lo tanto, cambiar el nombre de clase a uno que termine con uno de estos se ejecutará cuando se llame a "mvn test", de lo contrario, el complemento infalible debe configurarse específicamente con el nombre de clase.

La configuración de Powermock me parece bien, y los frascos parecen estar bien (suponiendo que las dependencias transitivas de Maven obtengan los otros frascos de Powermock; tenemos alrededor de 6 a 7 después de que nuestra resolución de Ivy los obtenga)

¿Eclipse podría estar usando su propia biblioteca JUnit "interna", por lo que los diferentes comportamientos?

¿La prueba está anotada con org.junit.@Test?

Si miras la fuente del complemento Surefire, hace algunas cosas engañosas.Si encuentra algún paquete TestNG en el Classloader, optará por ejecutar TestNG TestRunner.Todavía no he visto ningún ejemplo de pruebas de JUNit y TestNG funcionando bien una al lado de la otra.

Tuve el mismo problema y me tomó un tiempo darme cuenta.Mi configuración estaba incorporando una versión anterior de jboss.javassist, lo que curiosamente impedía que PowerMockRunner funcionara.

Vale la pena señalar que también tengo un entorno mixto JUnit/TestNG.Anteriormente probé la solución de agregar varios proveedores infalibles y tampoco funcionó (usando surefire 2.14.1).Después de actualizar a Surefire 2.17, mis pruebas JUnit y TestNG comenzaron a ejecutarse sin necesidad de declarar ningún proveedor seguro.

Aquí está mi sección de complementos...

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
                <groups>spring, unit, integration</groups>
                <systemPropertyVariables>
                    <java.awt.headless>true</java.awt.headless>
                    <org.apache.activemq.default.directory.prefix>target/test/</org.apache.activemq.default.directory.prefix>
                    <log4j.configuration>file:${project.basedir}/src/test/resources/log4j.properties</log4j.configuration>
                </systemPropertyVariables>
                <argLine>${surefire.args}</argLine>
            </configuration>
        </plugin>

...y los departamentos de pruebas pertinentes...

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.5</version>
        <scope>test</scope>
    </dependency>
    <!--
    PowerMock versions are compatible with specific Mockito versions.
    https://code.google.com/p/powermock/wiki/MockitoUsage13
     -->
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>1.5.4</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito</artifactId>
        <version>1.5.4</version>
        <scope>test</scope>
    </dependency>
    <!-- without this PowerMock tests don't run in maven -->
    <dependency>
        <groupId>jboss</groupId>
        <artifactId>javassist</artifactId>
        <version>3.8.0.GA</version>
        <scope>test</scope>
    </dependency>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top