有没有办法只跳过一个单一的testing在maven?

我想跳过只有一个testing,而启动mvn install

有没有办法做到这一点 ?

随着junit 4,我想添加一个@Ignore注释,当我想这样做。 这将适用于你,除非你只想有时候忽略testing,或者只有在从maven运行构build时才忽略它。 如果是这样的话,我会问“为什么?”

testing应该是一致的,他们应该是可移植的,他们应该总是通过。 如果一个特定的testing有问题,我会考虑重写它,完全删除它,或者将它移到不同的testing套件或项目。

您可以指定排除模式为-Dtest选项,前缀为! (感叹号)。 例如,

 mvn -Dtest=\!FlakyTest* install 

在这里find并validation工作。 例如,我可以通过使用以下方法跳过这种片状Jenkinstesting:

 mvn -Dtest=\!CronTabTest* package 

看看这个解决scheme ,使用@Category注释

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

然后你使用testing套件运行:

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

我认为这应该工作,如果使用这个命令:

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

(用于testing将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> 

testing类:

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

需要排除集成testing是正常的,但是需要包含unit testing。 为了达到这个目的,我build议用后缀IntegrationTest命名所有集成testing(例如AbcIntegrationTest.java)。

然后在你的maven build中放入以下内容:

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

当你用这个构build时,所有的集成testing都将被排除,但是所有其他testing(例如unit testing)都将被运行。 完美:-)

有关在testing运行期间排除和包括testing的更多信息,请阅读

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

PS要排除一个testing,只需要在排除列表中明确地命名它。 简单。

Interesting Posts