現在、両方のタイプのテストがありますが、「mvn test」と言うと、JUnitではなくTestNGテストのみを実行します。両方を次々に実行したい。何か案が ?
thiの未解決の問題 sがあるため、これを行うエレガントな方法はありません。
フレームワークを選択してそれを使用する方がはるかに簡単です。
編集:実行で依存関係を指定できないため、以前の回答は機能しません。私はいくつかの方法を試しましたが、管理できる最善の方法は、TestNG依存関係のプロファイルを作成して、TestNGとJUnitテストを切り替えられるようにすることです。TestNGテストとJunit 4テストの両方を実行する手段がないようです。 。
注意すべきもう1つのポイント: TestUnitからJUnitテストを起動 できますが、これはJUnit 3テストでのみ機能すると思います。
複数のプロバイダーを依存関係として指定することもでき、それらはすべて実行され、共通のレポートを生成します。含まれているプロバイダーを組み合わせるためのユースケースがほとんどないため、これは外部プロバイダーで特に便利です。
<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>
これに関する詳細情報: 1つのMavenモジュールでのTestNGテストとJUnitテストの混合– 2013版
maven-surefire-pluginの例 でのこのための現在のリンク。 「Running TestNG and JUnit Tests」を検索します。
次のようにjunitテストを無視するようにtestngプロバイダーを設定する必要があります。
<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>
より良い解決策 があります。
アイデアは、JUnit用とTestNG用の2つのmaven-surefire-plugin
の実行を作成することです。存在しないjunitArtifactName
またはtestNGArtifactName
を指定することにより、実行ごとにTestNGまたはJUnitのいずれかを無効にできます。
<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>
このリンクのおかげで( http://jira.codehaus.org/browse/SUREFIRE-377 )、これは私の以前の問題の解決策です(2つではなく3つの実行がある)
<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>
これには別の方法があります。 TestNGにJunitテストケースを実行するよう依頼することもできます。以下は、すべてのテストケースを実行するためのサンプルtestng.xmlです
<!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>
ビルドツールの構成を変更せずにTestNGで両方のテストタイプを実行するソリューションを見つけました。
私はGradleでテストしましたが、Mavenでも動作するはずです。
これはTestNG内でJUnitテストを実行しますが、逆は実行しないことに注意してください。
トリックは、テストクラスで両方のフレームワークの注釈を使用し、JUnit互換性のためにTestNGアサートを使用することです。
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);
}
}
このハックを使用すると、TestNGを使用して既存のJUnitテストを簡単に実行でき、時間の許す限りそれらを移行するのに役立ちます。
それが役に立てば幸い!
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>
同様に、必要に応じてTestNGの依存関係を使用します
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>
解決策は、確実なプラグインにJUnitを使用させることでした。次のように、特定のプロジェクトでsurefireプラグインをオーバーライドしてこれを行いました。依存関係により、確実に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>
以前のソリューションに基づいています。これが私たちにとって最も効果的であることがわかりました。私たちが直面していたもう1つの問題は、TestNGが古いJUnitテストを実行しようとすることでした。すべてのTestNGテストに異なる名前を付けることでこれを回避しました(例:* TestNG.Java)。以下は、surefire-pluginを2回実行した構成です。
<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>
testngプロバイダーを指定しただけの場合、junitテストとtestngテストの両方が一度だけ実行されます。
テストの名前に制限はありません。
プラグインのバージョン:
surefire-plugin 2.16(junit47およびtestngプロバイダーの両方のバージョンが2.16に設定されています)
testng依存関係6.8.7
junit依存関係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>
単に実行するより:mvn test -Pjunit-tests(junitに基づく実行テストの場合)またはmvn test -PtestNG-tests(TestNGテストベースの場合)。