mvn install
の起動中に1つのテストのみをスキップしたいと思います。
それを行う方法はありますか?
Junit 4では、@Ignore
アノテーションを追加したいときに追加します。テストをときどき無視したい場合や、mavenからビルドを実行するときにのみテストを無視したい場合を除き、これはうまくいきます。この場合、「なぜ?」
テストshould一貫性があり、should移植性があり、should常に合格です。特定のテストに問題がある場合は、書き直すか、完全に削除するか、別のテストスイートまたはプロジェクトに移動することを検討します。
通常、統合テストを除外する必要がありますが、単体テストを含める必要があります。これを実現するには、すべての統合テストに接尾辞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単一のテストを除外するには、除外リストに明示的に名前を付けるだけです。簡単です。
@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
このコマンドを使用すると、これが機能するはずです:
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");
}
}
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
を使用すると、統合テストのみが実行され、単体テストは実行されません