Question

Je ne suis pas en mesure d'exécuter Powermock par Maven. Je suis le PowerMock Mockito et PowerMockRunner pour la conduite d'un test JUnit.

Voici le test:

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

Je n'ai pas configuré anyting spécial pour l'exécution du test. Mes pom les références DEPS suivantes:

  • org.mockito | Mockito-tout | 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

quand je lance mvn -Dtest=AlertNotificationsTest test mvn dit qu'il n'y a pas de test à courir. Mais si je lance la même classe de test d'éclipse, tout fonctionne bien.

Est-ce que je fais quelque chose de mal?


Voici mon pom.xml ci-dessous (les parties pertinentes)

    <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>

Voici la sortie de maven

  

mvn -Dtest = AlertNotificationsTest test

...
[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] ------------------------------------------------------------------------

Remarque : Je peux courir d'autres tests, je ne peux pas exécuter ce test. Si je fais étendre la classe AlertNotificationsTest junit.framework.TestCase la classe est ramassé par Maven, mais il semble que cela ne soit pas entraînée par PowerMockRunner.

Voici la sortie que:


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

Encore une fois, ces tests fonctionnent très bien avec Eclipse.


Mise à jour J'ai trouvé un problème possible et solution de contournement. J'ai des tests avec TestNG et JUnit. Si je retire TestNG de mon pom et migrez tous mes tests à JUnit, je suis en mesure d'exécuter mon test de PowerMock avec mvn test. Il semble donc qu'il ya un problème avec Maven et le combo JUnit / testng.

Je voudrais être en mesure d'exécuter les deux, mais si je ne trouve pas une façon que je vais répondre à ma propre question. Merci les gars et gals

Était-ce utile?

La solution 7

Il y avait un problème lors du mélange à la fois TestNG et tests JUnit. Migration tous les tests à Junit résoudre mon problème. Merci les gars.

Autres conseils

Je viens d'avoir cette erreur et a travaillé à travers la solution. Mon fichier pom.xml avait la dépendance suivante:

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

Le problème vient du fait mon code utilise JUnit et la dépendance ci-dessus a une dépendance externe TestNG. Ce fut arrêter mon test de fonctionnement. Pourquoi je ne sais pas - vous auriez bien un cadre de test aurait été testé un peu mieux !!!

Quoi qu'il en soit la solution était de briser les dépendances « pleines » juste celles requises:

<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>

Ce résolu. BTW je mvn dependency:tree pour comprendre les dépendances associées.

Je ne peux pas reproduire votre problème. Avec le contenu suivant dans mon 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>

Et la classe de test suivant (sauter les importations):

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

L'exécution mvn test -Dtest=AppTest fonctionne très bien et me donne le résultat suivant:

...
-------------------------------------------------------
 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] ------------------------------------------------------------------------

La question est: avez-vous une méthode annotée avec @Test dans AlertNotificationsTest

Je suis tombé sur cette question aussi, mais ce ne est pas une question de PowerMock. Ma classe de test a été nommé XStaticTests.java.

Quand je lance « mvn essai propre », ce test ne fonctionne pas, il ne couru lorsque je spécifie le test en utilisant « -Dtest = ... »

La documentation infaillible mentionne que par défaut, seuls ces modèles sont recherchés: « /Test*.java » - inclut tous ses sous-répertoires et tous les noms de fichiers java qui commencent par « Test ». " / Test.java" - inclut tous ses sous-répertoires et tous les noms de fichiers java qui se terminent par "Test". " * / * TestCase.java." - inclut tous ses sous-répertoires et tous les noms de fichiers java qui se terminent par "TestCase"

Par conséquent changer le nom de classe à celui qui se termine par l'un de ceux-ci, se déroulera lorsque « mvn test » est appelé, sinon le plugin Surefire doit être configuré avec le nom de classe spécifique.

Configuration de Powermock regarde Ok pour moi, et les pots semblent très bien (en supposant que les dépendances transitif Maven obtenir les autres pots de powermock - nous avons environ 6-7 après notre volonté de lierre les reçoit)

Eclipse utilise peut-être sa propre bibliothèque JUnit « interne », donc les différents comportements?

Est-ce le test annotée avec org.junit. @ Test?

Si vous regardez dans la source du plugin Surefire, il fait des choses sournoise. Si elle trouve des paquets de TestNG dans le Classloader, il choisira de lancer un TestNG TestRunner. Je ne l'ai pas encore vu des exemples à la fois JUnit et des tests TestNG placés côte à côte bien.

J'ai eu le même problème, et il m'a fallu un certain temps pour comprendre. Mon installation a été tire dans une ancienne version de jboss.javassist, qui curieusement empêchait la PowerMockRunner de travailler du tout.

Il convient de noter que j'ai aussi un mélange JUnit / environnement TestNG. J'ai essayé précédemment la solution de l'ajout de plusieurs fournisseurs infaillibles, et cela ne fonctionne pas non plus (à l'aide surefire 2.14.1). Après la mise à niveau à surefire 2.17, mes deux tests JUnit et TestNG ont commencé à courir sans avoir besoin de déclarer les fournisseurs infaillibles.

Voici ma section plug-in ...

        <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>

... et les DEPS de tests pertinents ...

    <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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top