Ausführen von Junit & PowerMock mit Mockito durch PowerMockRunner von maven
Ich bin nicht in der Lage zu laufen, Powermock durch maven. Ich bin der PowerMock Mockito und PowerMockRunner für das fahren eines jUnit test.
Hier ist der test:
@RunWith(PowerMockRunner.class)
@PrepareForTest( { UserLocalServiceUtil.class, ExpandoBridge.class })
public class AlertNotificationsTest {
//...
Habe ich noch nicht konfiguriert anyting besonderes für die Durchführung des Tests. Mein pom verweist auf die folgenden Abhängigkeiten:
- 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 sagt, es gibt keinen test ausführen.
Aber wenn ich den gleichen test-Klasse aus eclipse läuft alles ok.
Mache ich etwas falsch?
Hier ist meine 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 laufen weitere tests, ich kann einfach nicht diesen test ausführen.
Wenn ich die AlertNotificationsTest
Klasse erweitern junit.framework.TestCase
die Klasse wird abgeholt von maven, aber es scheint, dass es keine Gefahren durch PowerMockRunner
.
Hier ist das Ergebnis, dass:
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
Wieder, diese tests laufen Prima mit Eclipse.
Update fand ich ein mögliches problem & workaround. Ich habe tests mit TestNG und JUnit. Wenn ich entfernen TestNG aus meinem pom und migrieren alle meine tests in JUnit, ich bin in der Lage zu laufen, meine PowerMock test mit mvn test
. So scheint es, dass es ein problem mit maven und junit/testng-combo.
Ich würde gerne in der Lage sein betreiben die beiden, aber Wenn ich nicht einen Weg finden, ich werde gehen und die Antwort auf meine eigene Frage.
Danke Jungs&Mädels
- Ist der test (nicht länger
junit.framework.TestCase
) ausgelöst, wenn Sie führen Sie einfachmvn test
? - Nein, es ist nicht ausgelöst.
- Dann nicht auch erwarten, dass es bei der Verwendung von
-Dtest
. Sie haben ein anderes problem (und es sieht aus wie Sie die Quelle gefunden).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich nur diesen Fehler, und arbeitete durch die Lösung. Meine pom.xml die Datei hat die folgende Abhängigkeit:
Das problem kommt von der Tatsache, meinen code verwendet JUnit, und die oben genannten Abhängigkeit ist eine externe Abhängigkeit von TestNG. Dieser wurde zu stoppen mein test ausgeführt. Warum weiß ich nicht - Sie hätte ein test-framework würde getestet wurden ein bisschen besser!!!
Sowieso die Lösung war, brechen die 'volle' Abhängigkeiten nur auf diejenigen, die erforderlich sind:
Dass es gelöst. BTW ich benutzt
mvn dependency:tree
zu verstehen, die damit verbundenen Abhängigkeiten.Kann ich nicht nachvollziehen dein problem. Mit folgendem Inhalt in meinem pom.xml:
Und der folgenden test-Klasse (überspringen der Importe):
Läuft
mvn test -Dtest=AppTest
einfach funktioniert und geben Sie mir die folgende Ausgabe:Also die Frage ist: haben Sie eine Methode annotiert mit
@Test
imAlertNotificationsTest
?pom.xml
dann. Wie gesagt, ich kann nicht reproduzieren Sie das Verhalten, das Sie beschreiben. Und BTW, was kann man beobachten, wenn Sie Sie ausführenmvn test
?Ich stieß auf dieses Problem als gut, aber es ist nicht eine PowerMock Problem. Meine Test-Klasse benannt wurde XStaticTests.java.
Wenn ich "mvn clean test" dieser test nicht laufen würde, es lief nur, wenn ich angegeben den test mit "-Dtest=..."
Die surefire Dokumentation erwähnt, dass standardmäßig nur diese Muster werden gesucht für :
"/Test*.java" - beinhaltet alle Unterverzeichnisse und alle java-Dateinamen beginnen mit "Test".
"/Test.java" - beinhaltet alle Unterverzeichnisse und alle java-Dateinamen enden mit "Test".
"*/*TestCase.java" - beinhaltet alle Unterverzeichnisse und alle java-Dateinamen enden mit "TestCase".
Daher ändern des Klassennamens auf eine, die endet mit einem von diesen, wird ausgeführt, wenn "mvn test" aufgerufen wird, sonst wird das surefire-plugin muss konfiguriert werden mit den Namen der Klasse, die speziell.
Powermock das setup sieht Ok für mich, und die Gläser scheinen in Ordnung (vorausgesetzt, maven transitive Abhängigkeiten bekommen, die anderen powermock-Gläser - wir haben etwa 6-7 nach unserem Efeu lösen Sie bekommt)
Eclipse sein könnte, mit seiner eigenen "internen" JUnit-Bibliothek, damit die unterschiedlichen Verhaltensweisen ?
Sind die test kommentiert mit org.junit.@Test ?
Wenn Sie einen Blick in die Quelle des Surefire plugin, es hat einige hinterlistige Sachen. Wenn es feststellt, dass ein TestNG-Pakete in den Classloader, es wird entscheiden, um führen Sie eine TestNG TestRunner. Ich habe noch nicht gesehen, Beispiele für JUNit und TestNG-tests ausführen sowie side-by-side.
Ich hatte das gleiche problem, und es dauerte eine Weile, um herauszufinden. Mein setup war zu ziehen, die in einer älteren version von jboss.javassist, die komischerweise war die Verhinderung der PowerMockRunner von der Arbeit auf alle.
Es ist erwähnenswert, dass ich auch ein gemischter JUnit /TestNG Umgebung. Ich habe bereits versucht, die Lösung hinzufügen mehrere todsichere Anbieter, und das hat nicht funktioniert (mit surefire 2.14.1). Nach dem Upgrade auf todsichere 2.17, meine beiden JUnit und TestNG-tests fing an zu laufen, ohne zu erklären, alle surefire-Anbieter.
Hier mein plugin-Bereich...
... und den jeweiligen Tests ab ...
Gab es ein problem beim mischen von beiden TestNG & JUnit-tests. Migrieren Sie alle tests in Junit mein problem gelöst.
Danke Jungs.