Im Moment habe ich beide Arten von Tests, aber wenn ich "mvn test" sage, führt es nur TestNG-Tests aus und nicht Junit. Ich möchte beide nacheinander ausführen. Irgendeine Idee ?
Es gibt eine offene Ausgabe für thi s. Es gibt also keine elegante Möglichkeit, dies zu tun.
Es wäre viel einfacher für Sie, einen Rahmen auszuwählen und dabei zu bleiben.
Bearbeiten: Meine vorherige Antwort funktioniert nicht, da Sie in der Ausführung keine Abhängigkeiten angeben können. Ich habe einige Ansätze ausprobiert, aber das Beste, was ich schaffen kann, ist, ein Profil für die TestNG-Abhängigkeit zu erstellen Da zwischen TestNG- und JUnit-Tests hin- und hergeschaltet werden kann, scheint es keine Möglichkeit zu geben, TestNG- und Junit 4-Tests auszuführen.
Noch ein weiterer Hinweis: Sie können Ihre JUnit-Tests von TestNG starten , aber ich denke, dass dies nur für JUnit 3-Tests funktioniert.
Sie können auch mehrere Anbieter als Abhängigkeiten angeben, die alle ausgeführt werden und einen gemeinsamen Bericht erstellen . Dies kann besonders bei externen Providern hilfreich sein, da es nur wenige Anwendungsfälle für die Kombination der enthaltenen Provider gibt.
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<dependencies>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.18.1</version>
</dependency>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-testng</artifactId>
<version>2.18.1</version>
</dependency>
</dependencies>
</plugin>
Weitere Informationen hierzu: Mischen von TestNG- und JUnit-Tests in einem Maven-Modul - Ausgabe 2013
Aktueller Link hierzu in den maven-surefire-plugin Beispielen . Suche nach " Running TestNG und JUnit Tests ".
Sie müssen den Testng-Provider so konfigurieren, dass er die Junit-Tests ignoriert, wie folgt:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<properties>
<property>
<name>junit</name>
<value>false</value>
</property>
</properties>
</configuration>
[...providers as dependecies, see above...]
</plugin>
Ich habe eine bessere Lösung .
Die Idee ist, zwei Ausführungen von maven-surefire-plugin
zu erstellen, eine für JUnit, eine für TestNG. Sie können TestNG oder JUnit pro Ausführung deaktivieren, indem Sie nicht vorhandene junitArtifactName
oder testNGArtifactName
angeben:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<testNGArtifactName>none:none</testNGArtifactName>
</configuration>
</execution>
<execution>
<id>test-testng</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<junitArtifactName>none:none</junitArtifactName>
</configuration>
</execution>
</executions>
</plugin>
Dafür gibt es einen anderen Weg. Sie können TestNG auch bitten, Junit-Testfälle auszuführen. Nachfolgend finden Sie das Beispiel testng.xml zum Ausführen aller Testfälle
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestAll">
<test name="junitTestCases" junit="true">
<packages>
<package name="com.test.*" />
</packages>
</test>
<test name="testNGTestCases" >
<packages>
<package name="com.test.*" />
</packages>
</test>
</suite>
Dank dieses Links ( http://jira.codehaus.org/browse/SUREFIRE-377 ) ist hier eine Lösung für mein vorheriges Problem (3 Ausführungen statt 2).
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<testNGArtifactName>none:none</testNGArtifactName>
</configuration>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<junitArtifactName>none:none</junitArtifactName>
<testNGArtifactName>org.testng:testng</testNGArtifactName>
</configuration>
</execution>
</executions>
</plugin>
Für JUnit ---
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.19.1</version>
</dependency>
</dependencies>
Verwenden Sie bei Bedarf auch die Abhängigkeit für TestNG
für Junit löste dies mein Problem
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.19.1</version>
</dependency>
</dependencies>
Ich habe eine Lösung gefunden, um beide Testtypen mit TestNG auszuführen, ohne die Build-Tool-Konfiguration zu ändern.
Ich habe mit Gradle getestet, sollte aber auch mit Maven zusammenarbeiten.
Beachten Sie, dass dies JUnit-Tests in TestNG ausführt, jedoch nicht umgekehrt.
Der Trick besteht darin, die Anmerkungen beider Frameworks in den Testklassen zu verwenden und TestNG-Asserts für JUnit-Kompatibilität zu verwenden.
import static org.testng.AssertJUnit.*;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@org.testng.annotations.Test
public final class ApplicationTest {
@org.testng.annotations.BeforeClass
@BeforeClass
public static void setup () {}
@org.testng.annotations.AfterClass
@AfterClass
public static void cleanup () {}
@Test public void json () throws IOException {
assertTrue (true);
}
}
Mit diesem Hack können Sie vorhandene JUnit-Tests problemlos mit TestNG ausführen, um sie bei Bedarf zu migrieren.
Ich hoffe es hilft!
Ich fand, dass die Lösung darin bestand, das sure-fire-Plugin zur Verwendung von JUnit zu zwingen. Ich habe dies getan, indem ich das todsichere Plugin in dem spezifischen Projekt wie folgt überschrieben habe. Die Abhängigkeit zwingt zur Nutzung von JUnit.
<build>
<plugins>
<!-- force sure fire to use junit instead of testng -->
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<dependencies>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.10</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
Basierend auf früheren Lösungen. Ich fand das am besten für uns. Ein weiteres Problem, mit dem wir konfrontiert waren, war TestNG, der versuchte, alte JUnit-Tests auszuführen. Wir haben dies vermieden, indem wir alle TestNG-Tests unterschiedlich benannten (z. B. * TestNG.Java). Unten ist die Konfiguration mit zwei Ausführungen des Surefire-Plugins.
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<testNGArtifactName>none:none</testNGArtifactName>
<excludes>
<exclude>**/*TestNG.Java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>test-testng</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<junitArtifactName>none:none</junitArtifactName>
<testNGArtifactName>org.testng:testng</testNGArtifactName>
<includes>
<include>**/*TestNG.Java</include>
</includes>
<excludes>
<exclude>**/*Test.Java</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
wenn Sie nur testng provider angeben, werden sowohl junit-Tests als auch testng-Tests nur einmal ausgeführt.
Es gibt also keine Einschränkung bei der Benennung der Tests.
plugin-Versionen:
surefire-plugin 2.16 (junit47 und testng provider beide Version auf 2.16 gesetzt)
testng Abhängigkeit 6.8.7
junit Abhängigkeit 4.7
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>${Java.version}</source>
<target>${Java.version}</target>
</configuration>
</plugin>
<!-- ********* Skip Test for Success BUILD ******** -->
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!-- *********************************************** -->
</plugins>
</build>
<profiles>
<!-- ********** Profiles for run test cases ************ -->
<!-- Profile for run JUnit test dependent tests -->
<profile>
<id>junit-tests</id>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<skip>false</skip>
</configuration>
<dependencies>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.10</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
<!-- Profile for run TestNG dependent tests -->
<profile>
<id>testNG-tests</id>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!-- ***************************************************** -->
</profiles>
Dann führen Sie einfach aus: mvn test -Pjunit-tests (für Lauftest basierend auf junit) oder mvn test -PtestNG-Tests (für TestNG-Test basierend).