web-dev-qa-db-ja.com

Mavenで1つのテストのみをスキップする方法はありますか?

mvn installの起動中に1つのテストのみをスキップしたいと思います。

それを行う方法はありますか?

56
paulgreg

Junit 4では、@Ignoreアノテーションを追加したいときに追加します。テストをときどき無視したい場合や、mavenからビルドを実行するときにのみテストを無視したい場合を除き、これはうまくいきます。この場合、「なぜ?」

テストshould一貫性があり、should移植性があり、should常に合格です。特定のテストに問題がある場合は、書き直すか、完全に削除するか、別のテストスイートまたはプロジェクトに移動することを検討します。

21
Steve Reed

-Dtest(感嘆符)を前に付けることで、!オプションに除外パターンを指定できます。例えば。、

mvn -Dtest=\!FlakyTest* install

here で見つけて、動作することを確認しました。たとえば、次を使用して this flaky Jenkinsテストをスキップできました:

mvn -Dtest=\!CronTabTest* package
42
haridsv

通常、統合テストを除外する必要がありますが、単体テストを含める必要があります。これを実現するには、すべての統合テストに接尾辞IntegrationTest(例:AbcIntegrationTest.Java)を付けることをお勧めします。

そして、あなたのMavenビルドに次のものを入れてください:

  <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>**/*IntegrationTest.Java</exclude>
                </excludes>
            </configuration>
        </plugin>

これでビルドすると、すべての統合テストが除外されますが、他のすべてのテスト(たとえば、ユニットテスト)が実行されます。完璧:-)

テスト実行中のテストの除外と追加の詳細については、

http://maven.Apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html

PS単一のテストを除外するには、除外リストに明示的に名前を付けるだけです。簡単です。

7
fergal_dd

@Categoryアノテーションを使用して、 このソリューション をご覧ください

public class AccountTest {

    @Test
    @Category(IntegrationTests.class)
    public void thisTestWillTakeSomeTime() {
        ...
    }

    @Test
    @Category(IntegrationTests.class)
    public void thisTestWillTakeEvenLonger() {
        ...
    }

    @Test
    public void thisOneIsRealFast() {
        ...
    }
}

次に、テストスイートを使用して実行します。

@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { AccountTest.class, ClientTest.class })
public class LongRunningTestSuite {}

Exempleに使用するmavenのテストを含める(groups)/除外する(excludedGroups)こともできます。

mvn -DexcludedGroups=com.mycompany.tests.IntegrationTests test
6
Renaud

このコマンドを使用すると、これが機能するはずです:

mvn archetype:create -DgroupId=test -DartifactId=test

(テストの場合、pom.xmlとtest-classを以下に変更し、mvn installを使用します)

pom.xml

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>test</name>
<url>http://maven.Apache.org</url>
<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        test/AppTest.Java
              </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.5</version>
        <scope>test</scope>
    </dependency>
</dependencies>

テストクラス:

package test;
import org.junit.Test;
import static org.junit.Assert.fail;
public class AppTest 
{
    @Test
    public void test_it() {
        fail("not implemented");
    }
}
4
Raffael Schmid

CLIを使用して1つのテストを除外する場合は、-Dtestおよび-Dit.testフラグを使用する必要があります。

デフォルトをリセットするように注意してください。 !表記を使用している場合、デフォルトはすべて消去されるため、元に戻す必要があります。 surefireによって実行される通常のテストの場合は*Test, Test*, *Tests, *TestCaseを追加する必要がありますが、failsafeによって実行される統合テストの場合はIT*, *IT, *ITCaseを追加する必要があります。

詳細はこちらをご覧ください https://maven.Apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html (通常のテスト)

そしてここ https://maven.Apache.org/surefire/maven-failsafe-plugin/examples/inclusion-exclusion.html (統合テスト)

-Dit.test='!ITsometestIT, IT*, *IT, *ITCase'

完全なmvnコマンドは次のようになります。

mvn -e -B -Dtest='!unitTestABC, *Test, Test*, *Tests, *TestCase' -Dit.test='!ITintegrationTestABCIT, IT*, *IT, *ITCase' -DfailIfNoTests=false clean install

'ではなく"を使用することを忘れないでください。二重引用符を使用すると、その中の!bashによって評価されます。

mvn testの場合、統合テストは実行されないことも忘れないでください。 mvn verifyを使用すると、統合テストのみが実行され、単体テストは実行されません

1
Naramsim