Mavenで単一のテストメソッドを実行する


519

私はあなたが特定のクラスですべてのテストを実行できることを知っています:

mvn test -Dtest=classname

しかし、個別のメソッドを実行したいのですが、-Dtest = classname.methodnameが機能しないようです。


3
私もこれを行う方法を知りたいです。ただし、頻繁に実行していることに気付いた場合は、テストを独自のクラスに分割する候補になる可能性があるため、mvn test -Dtest=classname構文を使用できます。
ジョンポーレット

コマンドラインだけでそれを行う方法を知りたいですか?または、IDE(Eclipse)を使用するとうまくいきますか?
Diego Dias

1
コマンドラインを見ていました。私はjunit eclipseプラグインでこれを行うことができると思います。
BillMan、2009

これはMaven 1で行いました。思い出したように、テストクラスのイントロスペクションを担当するJUnitに変更を加える必要がありました。
kdgregory 2009

回答:


698

Mavenで単一のテストメソッドを実行するには、次のようにコマンドを指定する必要があります。

mvn test -Dtest=TestCircle#xyz test

どこがTestCircleテストクラス名であり、xyz試験方法です。

ワイルドカード文字も機能します。メソッド名とクラス名の両方で。

マルチモジュールプロジェクトでテストする場合は、テストで使用するモジュールを指定します-pl <module-name>

統合テストではit.test=...test=...次の代わりにオプションを使用します。

mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test

4
確実な2.9にダウングレードすることにより、エラーを「いいえテストが実行された」固定
QWERTY

15
「テストは実行されませんでした!」2.14にアップグレードする場合:
alfonx 2013年

54
マルチモジュールプロジェクトでテストする場合は、テストで使用するモジュールも指定する必要があります-pl <module-name>
2013年

22
-DfailIfNoTests=falseテストなしでプロジェクトをスキップするために使用します。No Tests Were Executedルートプロジェクトからテストを実行しようとしたときに、テストのないモジュールがまったく存在しない場合に発生します。
チェリー

4
このコマンドは機能します!! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test 「-DTest」は大文字の「T」で始まることに注意してください。
ビカ2017

25

surefire 2.12に問題があります。これが、maven-surefire-pluginを2.12から2.11に変更した場合に起こります。

  1. mvn test -Dtest=DesignRulesTest

    結果:
    [エラー]ゴールorg.apache.maven.plugins:maven-surefire-plugin:2.12:test(default-test)をプロジェクトpmdで実行できませんでしたテストは実行されませんでした!

  2. mvn test -Dtest=DesignRulesTest

    結果:[INFO] --- maven-surefire-plugin:2.11:test(default-test)@ pmd --- ... Running net.sourceforge.pmd.lang.java.rule.design.DesignRulesTestテストの実行:5 、失敗:0、エラー:0、スキップ:4、経過時間:4.009秒


5
2.12.1以降で再び動作します。
yurez

「テストは実行されませんでした!」を修正しました 2.14にアップグレードして
alfonx 2013年

を使用する場合はを使用@Category(IntegrationTest.class)します-Dit.test=ClassName。それ以外の場合はNo tests were executed!、最新のプラグインバージョンでも取得できます。
uvsmtid

16

TestNG(申し訳ありませんが、JUnitはこれをサポートしていません)のテストケースでは、実行するテストにグループを割り当てることができます。

@Test(groups="broken")

そして、単に 'mvn -Dgroups = broken'を実行します。


1
これは良い答えです。私の場合、テストを実行しようとしましたが、一部のSeamコンポーネントが正しくセットアップされていなかったため、セットアップコードの一部もスキップされているようです。
クリスウィリアムズ

1
正しい。@BeforeMethodにgroups = brokenを入れるか、@ BeforeMethod(alwaysRun = true)を実行する必要があります
tunaranch

コンパイルの問題が発生しているので、ここでグループとは何か教えてください。
Paramesh Korrakuti

14

単一のテストクラスでの一連のメソッドの実行バージョン2.7.3では、単一のテストクラスで実行できるテストはn個のみです。

注:junit 4.xおよびTestNGでサポートされています。

次の構文を使用する必要があります

mvn -Dtest=TestCircle#mytest test

パターンも使えます

mvn -Dtest=TestCircle#test* test

surefire 2.12.1以降、複数の方法を選択できます(現時点ではJUnit4Xのみ、パッチは歓迎します)

mvn -Dtest=TestCircle#testOne+testTwo test

単一のテストについては、このリンクを確認してください


2
私の場合、mvn -Dtest = "TestCircle#myTest" testのようにTestClass#test名を二重引用符で囲む必要がありました
Pratik Khadloya

@PratikKhadloya依存テストでどのように機能するか考えていますか?たとえば、TestClassにtest1()、test2()、test3()メソッドがあり、test2はtest1に依存しているとします。test2()だけを実行するにはどうすればよいですか?
ジスカ2014年

3
テスト間に依存関係がある場合、何か間違っていると思います。各テストは、他のテストから独立している必要があります。それらの間の結合を削除する必要があります。
Pratik Khadloya 2014年

11

次の構文を使用して、特定のテストクラスとメソッドを実行できます。

  1. 完全なパッケージ:mvn test -Dtest = "com.oracle.tests。**"

  2. クラス内のすべてのメソッド:mvn test -Dtest = CLASS_NAME1

  3. 単一クラスの単一メソッド:mvn test -Dtest = CLASS_NAME1#METHOD_NAME1

  4. 複数のクラスからの複数のメソッド:mvn test -Dtest = CLASS_NAME1#METHOD_NAME1、CLASS_NAME2#METHOD_NAME2


9

このコマンドは機能します!! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test「-DTest」は大文字の「T」で始まることに注意してください。


4
SureFire 2.18.xでは機能しません。すべてのテストを実行するだけです。
Janaka Bandara、

4

テスト tobrienで言及したパラメータは、使用してメソッドを指定することができます#のメソッド名の前に。これはJUnitとTestNGで機能するはずです。私は試したことがないので、Surefireプラグインのページで読んでください

このパラメーターを指定して、ファイル名で個々のテストを実行し、includes / excludesパラメーターをオーバーライドします。ここで指定する各パターンは、** / $ {test} .javaのようなフォーマットのインクルードパターンを作成するために使用されるため、「-Dtest = MyTest」と入力するだけで、「foo / MyTest.java」という単一のテストを実行できます。このパラメーターは、includes / excludesパラメーター、およびTestNG suiteXmlFilesパラメーターをオーバーライドします。2.7.3以降#myMethodまたは#my * ethodを追加して、テストで限られた数のメソッドを実行できます。Siタイプ "-Dtest = MyTest#myMethod"がjunit 4.xおよびtestNgでサポートされています


3

JUnitの新しいバージョンには、カテゴリーランナーが含まれています。http//kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

ただし、JUnitのリリース手順はMavenベースではないため、Mavenユーザーはそれを手動でリポジトリに配置する必要があります。


1
いいね。しかし、これがどのように質問に答えるかはわかりません。
Pascal Thivent、2009

2
SUBJは、Mavenの-確実な-プラグインの2.7.3バージョンからサポートされています。maven.apache.org/plugins/maven-surefire-plugin/examples/...
アンドリーPlokhotnyukを

3

surefireプラグインバージョン2.22.1(おそらく以前)では、testng.xmlを使用するときにtestnamesプロパティを使用して単一のテストを実行できます。

次のtestng.xmlがあるとします

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="all-tests">
        <classes>
            <class name="server.Atest"/>
            <class name="server.Btest"/>
            <class name="server.Ctest"/>
        </classes>
    </test>
    <test name="run-A-test">
        <classes>
            <class name="server.Atest"/>
        </classes>
    </test>
    <test name="run-B-test">
        <classes>
            <class name="server.Btest"/>
        </classes>
    </test>
    <test name="run-C-test">
        <classes>
            <class name="server.Ctest"/>
        </classes>
    </test>
</suite> 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    [...]
    <properties>
        <selectedTests>all-tests</selectedTests>
    </properties>
    [...]
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.1</version>
            <configuration>
                <suiteXmlFiles>
                    <file>src/test/resources/testng.xml</file>
                </suiteXmlFiles>
                <properties>
                    <property>
                        <name>testnames</name>
                        <value>${selectedTests}</value>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
    [...]
</project>

コマンドラインから

mvn clean test -DselectedTests=run-B-test

さらに読書- Mavenの確実なTestNGのを使用してプラグイン


-5

単一のテストクラスを実行できますが、テストクラス内の単一のメソッドは実行できません。クラスの完全修飾名ではなく、クラスの単純名を使用します。したがって、「org.sonatype.test.MyTest」にテストがあり、それが実行する唯一のテストである場合、コマンドラインは次のようになります。

mvn test -Dtest=MyTest

以前のコメントで説明したソリューションを単一モジュールプロジェクトでテストしたため、このコメントの内容は正しくありません。
tonio

5
それは最初に答えられた2009年に本当だったかもしれません。
2017

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.