Frage

Ich bin in der Lage, nicht PowerMock durch Maven zu laufen. Ich bin die PowerMock Mockito und PowerMockRunner für einen JUnit-Test fahren.

Hier ist der Test:

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

Ich habe nicht anyting spezielle konfiguriert für die Durchführung des Tests. Meine pom Referenzen folgende deps:

  • org.mockito | Mockito-all | 1.8.0
  • junit | junit | 4.6.0
  • org.powermock.modules | PowerMock-Modul-junit4 | 1.3.1
  • org.powermock.api | PowerMock-api-Mockito | 1.3.1

, wenn ich mvn -Dtest=AlertNotificationsTest test mvn laufen sagt, es gibt keinen Test laufen zu lassen. Aber wenn ich die gleiche Testklasse von Eclipse läuft, läuft alles in Ordnung.

Bin ich etwas falsch zu machen?


Hier ist mein pom.xml unten (die relevanten Teile)

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

Hier ist die Ausgabe von 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] ------------------------------------------------------------------------

Hinweis : Ich kann andere Tests laufen, ich kann einfach nicht diesen Test ausführen. Wenn ich die AlertNotificationsTest Klasse erweitert junit.framework.TestCase machen wird die Klasse von Maven abgeholt, aber es scheint, dass es nicht durch PowerMockRunner angetrieben bekommt.

Hier ist der Ausgang dieser:


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

Auch hier laufen diese Tests ganz gut mit Eclipse.


Aktualisieren fand ich ein mögliches Problem und Abhilfe. Ich habe Tests mit TestNG und JUnit. Wenn ich TestNG von meinem pom entfernen und alle meine Tests zu JUnit migrieren, kann ich meinen PowerMock Test mit mvn test laufen. So scheint es, dass ein Problem mit Maven gibt es und die junit / testng Combo.

Ich möchte in der Lage sein, sowohl zu laufen, aber wenn ich werde ich meine eigene Frage nicht einen Weg finden, gehen und beantworten. Danke Jungs & Mädels

War es hilfreich?

Lösung 7

Es gab ein Problem, wenn beide TestNG und JUnit-Tests zu mischen. Migrieren alle Tests Junit mein Problem gelöst. Danke Jungs.

Andere Tipps

Ich hatte gerade diesen Fehler und arbeitete durch die Lösung. Meine pom.xml Datei hatte die folgende Abhängigkeit:

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

Das Problem kommt von der Tatsache meines Code verwendet JUnit und die obige Abhängigkeit hat eine externe Abhängigkeit von TestNG. Dies war mein Test zu stoppen vom Laufen. Warum, weiß ich nicht - Sie hätte allerdings eine Test-Framework ein wenig besser getestet worden wäre !!!

Auf jeden Fall war die Lösung zu brechen die ‚vollen‘ Abhängigkeiten nur diejenigen erforderlich:

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

Das löste es. BTW habe ich mvn dependency:tree die damit verbundenen Abhängigkeiten zu verstehen.

Ich kann das Problem nicht reproduzieren. Mit folgendem Inhalt in meinem 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>

Und der folgende Test-Klasse (Überspringen der Importe):

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

Beim Laufen mvn test -Dtest=AppTest nur funktioniert gut und geben Sie mir die folgende Ausgabe:

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

Die Frage ist also: haben Sie eine Methode haben mit @Test in AlertNotificationsTest kommentierten

Ich kam in dieser Frage auch, aber es ist kein Problem PowerMock. My Test-Klasse hieß XStaticTests.java.

Als ich „mvn sauber Test“ laufen, würde dieser Test nicht ausgeführt, es lief nur, wenn ich den Test angegeben mit „-Dtest = ...“

Die todsichere Dokumentation erwähnt, dass standardmäßig nur diese Muster gesucht werden: „ /Test*.java“ - umfasst alle Unterverzeichnisse und alle Java-Dateinamen, die mit „Test“ beginnen. " / Test.java" - umfasst alle Unterverzeichnisse und alle Java-Dateinamen, die Ende mit "Test". " * / * TestCase.java." - umfasst alle Unterverzeichnisse und alle Java-Dateinamen, die Ende mit "Testfall"

Deshalb die Klassennamen zu einem Wechsel, dass Enden mit einem von diesen, wird ausgeführt, wenn „mvn-Test“ genannt wird, sonst die todsichere Plugin Bedürfnisse mit dem Klassennamen speziell konfiguriert werden.

PowerMock Setup sieht nicht gut aus für mich, und die Gläser scheinen fein (unter der Annahme, maven transitive Abhängigkeiten die anderen PowerMock Gläser - wir haben etwa 6-7 nach unserer Efeu Entschlossenheit bekommt sie)

Eclipse-verwenden könnte seine eigenen „interne“ JUnit-Bibliothek, so dass die verschiedenen Verhaltensweisen?

Ist die Prüfung mit org.junit kommentiert. @ Test?

Wenn Sie die Quelle des todsichere Plugin schauen, es hat einige hinterhältige Sachen. Wenn es keine TestNG-Pakete in dem Classloader findet, wird es entscheiden, einen TestNG Testrunner laufen. Ich habe noch keine Beispiele für beide JUnit gesehen und TestNG Tests laufen gut Seite an Seite.

Ich hatte das gleiche Problem, und es dauerte eine Weile, um herauszufinden. Mein Setup wurde in einer älteren Version von jboss.javassist ziehen, die seltsam das PowerMockRunner wurde verhindert, dass überhaupt arbeiten.

Es ist erwähnenswert, dass ich habe auch eine gemischte JUnit / TestNG Umgebung. Ich habe versucht, vorher die Lösung mehr todsicheren Anbieter hinzuzufügen, und das auch nicht funktionierte (mit todsicheren 2.14.1). Nach dem Upgrade 2.17 bis todsichere sowohl meine JUnit und TestNG begann Tests läuft ohne todsicheren Anbieter erklären zu müssen.

Hier ist mein Plugin Abschnitt ...

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

... und die entsprechende Prüfung deps ...

    <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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top