Frage

Aus irgendeinem Grund kann ich nicht bekommen Maven 2 Surefire Plugin JUnit 4 Test-Klasse auszuführen.

public class SimpleTest {
  @org.junit.Test
  public void simple() {
     System.out.println("foo");
  }
}

Allerdings, wenn ich diese Klasse ändern JUnit-3 wie, wie

werden
public class SimpleTest extends junit.framework.TestCase {
  public void testBar() {
     System.out.println("bar");
  }

  @org.junit.Test
  public void simple() {
     System.out.println("foo");
  }
}

dann wird sie ausgeführt. Hier ist, was ich getan habe:

Andere Tipps

Die todsichere Plugin findet heraus, welche JUnit-Provider sollten auf der Basis der Classpath verwendet werden. Wenn es mehrere Versionen JUnit auf dem Classpath sind, können Sie entweder die Classpath korrigieren nur eine JUnit-Version auf dem Classpath haben (wie oben beschrieben), oder Sie können explizit angeben, welche Anbieter Sie verwenden möchten. Zum Beispiel kann die folgende Angabe in Ihren (Eltern) POM Kräften, die die neuesten Provider (zum Beispiel "todsichere-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>
[...]

Beachten Sie jedoch, dass todsichere 2.7 die Art und Weise verändert es bestimmt, welche Einheit Testklassen ausgeführt werden. Das neue Verhalten, wenn sie mit JUnit 4 todsicheren 2.7 (oder höher) ist, dass jeder Test ohne @Test Annotation automatisch übersprungen. Diese groß sein kann, wenn man nur haben JUnit 4 Unit-Tests, aber wenn Sie haben eine Kombination von JUnit 3 und 4 Unit-Tests, den „todsichere-junit47“ Provider wird nicht korrekt funktionieren. In solchen Fällen wählen ihr Bestes, um explizit die „todsichere-junit4“ Anbieter:

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

Ich weiß nicht, was Sie unter „kann nicht ausgeführt werden“, sondern hilft es ausdrücklich auf die von der maven-surefire-plugin verwendet umfasst?

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

Auch stellt den Betrieb von Maven mit der -X Flagge liefert nützliche Informationen?

Eine weitere mögliche Ursache kann diesen Fehler sein (geschlossen mit "Werde nicht reparieren"): https://issues.apache.org/jira/browse/SUREFIRE-587

Kurze Zusammenfassung:. Tests erstrecken Testcase (aber nicht mit Anmerkungen) nicht abgeholt werden, wenn ihr Name nicht mit „Test“ end

Für einige arme Seele da draußen, die sich fragen, warum Maven nicht JUnit-Tests abholen.

Ich habe sowohl JUnit und TestNG als dependecies. Aber ich will meine ausfallsichere Funktionstests laufen mit TestNG und todsicheren zu meinem Unit-Tests mit JUnit ausgeführt werden.

Allerdings fand ich, dass todsichere meine Unit-Tests wurde versucht, mit TestNG zu laufen und fand nichts zu laufen. Meine JUnit-Tests wurden übersprungen.

Später kam ich auf diese Maven Ausgabe und konfiguriert todsichere nur laufen " JUnit“Tests wie folgt aus:

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

Hoffe, das hilft jemand.

Zum Nutzen der Googler, wenn ich dieses Problem hatte, es war, weil ich eine PowerMock Abhängigkeit eingeschlossen hatte, die in TestNG gezogen, so dass keine [TestNG] Tests, die von Surefire erkannt werden.

habe ich die m2eclipse „Abhängigkeitshierarchie“ -Reiter des POM-Editor die Abhängigkeit und Rechtsklick finden einen Ausschluß zu erzeugen (siehe XML unten).

Für die Vollständigkeit (und für diejenigen, die nicht m2eclipse verwenden) ist hier die XML, die die Abhängigkeit ausschließt - ich nur über diese Funktion von Maven kam durch Sehen diese Tags automatisch generiert:

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

(In meinem Fall ohne "PowerMock-Modul-testng" war ausreichend, aber man kann TestNG direkt ausschließen, wenn es von woanders hereinkommt.)

Die Überprüfung, die Sie getan haben, gut, vor allem prüfen, ob Sie Version verwenden 2.3+ des todsicheren Plugin (Standard, werden Sie Version 2.4.3 mit Maven bekommen 2.1 Super POM so sollte dies ok) und die Überprüfung, dass Sie die junit-3.8.1.jar Abhängigkeit transitively nicht ziehen.

Nun, nur um bestätigt, dass dies nicht ein „globales Problem“ (Ich glaube nicht TBH), könnten Sie ein Projekt von Grunde auf, zum Beispiel, indem Sie erstellen:

mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=maven-junit4-testcase

Dann die junit Abhängigkeit aktualisieren:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.7</version>
  <scope>test</scope>
</dependency>

Und die Compiler Ebene konfiguriert für 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>

setzen Schließlich Ihr SimpleTest.java neben AppTest.java und führen mvn test.

Wenn mvn test läuft funktioniert gut für das Projekt (und ich erwarte es ohne Problem laufen), könnten Sie bitte Ihre Frage mit der POM-Konfiguration aktualisieren Sie verwenden (aus dem Projekt, die Mühen)?

Eine kleine Änderung hat mir geholfen, Funnily !!!

Ich änderte den Namen der Klasse von MyClassTest zu TestMyClass, Ich habe diese Idee nach veryfing meine Eltern pom.xml unten Zeile enthält

<test.include.pattern> **/Test*.java <test.include.pattern/>

1.) Fügen Sie folgende todsichere Plugin in pom.xml

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
</configuration>
</plugin>

2.) standardmäßig todsichere Plugin nimmt Test-Klasse aus dem Paket: - src / test / java /....

So gehen Pfad zum Erstellen und schließen Testordner in Classpath wie unten:

eingeben Bild Beschreibung hier

.

3) Zur -> Ausführen als -> Maven Test

[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

Sie hat ein ähnliches Problem bei dem Versuch, Integrationstests auszuführen. Ich hatte eine alte Version des todsicheren Plugin, das TestNG und nicht jUnit laufen wollte. Ich habe die Versionsnummer in der pom bis 2,20 und es funktionierte.

Haben Sie konfigurieren Ihre Maven-Kompilierung-Plugin für die richtige Compiler-Ebene, wie:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <source>1.5</source>
    <target>1.5</target>
  </configuration>
</plugin>

Ansonsten wird Maven haben Probleme mit Anmerkungen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top