使用 Maven 命令运行 Junit Suite
Posted
技术标签:
【中文标题】使用 Maven 命令运行 Junit Suite【英文标题】:Run Junit Suite using Maven Command 【发布时间】:2012-07-30 13:24:53 【问题描述】:我有多个 Junit 测试套件(SlowTestSuite、FastTestSuite 等)。我想使用 maven 命令只运行特定的套件。例如
mvn clean install test -Dtest=FastTestSuite -DfailIfNoTests=false
但它不起作用。只是根本没有运行任何测试。请有任何建议。
【问题讨论】:
我不确定你是否可以从surefire插件运行JUnit测试套件。 仍然不能用作:mvn test -Dtest=com.org.mysuites.FastTestSuite -DfailIfNoTests=false 您可以使用运行正常的surefire插件运行,如果您包含它,例如<include>**/FastTestSuite.class</include>
。它只是使用 maven 命令从命令行运行它的要求。
没有运行mvn clean test -Dtest=FastTestSuite
的异常,因为它没有拾取该套件,因此没有运行测试。
仅供参考,所有套件都在 src/test/java/ 下(不确定是否重要)。
【参考方案1】:
我通过将属性添加到 pom 中实现了这一点:
<properties>
<runSuite>**/FastTestSuite.class</runSuite>
</properties>
maven-surefire-plugin 应该是:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>$runSuite</include>
</includes>
</configuration>
</plugin>
所以这意味着默认情况下它将运行 FastTestSuite 但您可以运行其他测试,例如SlowTestSuite 使用 maven 命令为:
mvn install -DrunSuite=**/SlowTestSuite.class -DfailIfNoTests=false
【讨论】:
我想补充一点,maven-surefure-plugin 是必需的,我在某些地方发现只有使用该属性才能工作,但事实并非如此。 感谢 @Java SE,您的方法与 Maven 3.3.3 和 JUnit 4.12 完美配合。但是可以使用**/FastTestSuite.java
代替**/FastTestSuite.class
。两种变体都表现良好,但指定 .java
看起来更符合官方文档(例如,maven.apache.org/surefire/maven-surefire-plugin/examples/…)。
当我添加这些设置时,我的测试套件运行,但所有其他测试都被排除在外。如果我不添加设置,所有测试都会运行,但我的测试套件会被忽略。
次要附录 -- properties
元素位于 project
元素的根部(即直接在其中,而不在 project
内的任何东西内,dependencies
的兄弟姐妹和build
等等)。如果您的 project
根中已经有一个 properties
元素,不要添加另一个 -- 相反,只需将内行 (<runSuite> ... </runSuite>
) 添加到现有元素。【参考方案2】:
您错过的关键字是 maven-surefire-plugin :http://maven.apache.org/plugins/maven-surefire-plugin/。
用法是:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.1</version>
<configuration>
<includes>
<include>**/com.your.packaged.Sample.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
如果你稍微搜索一下堆栈溢出,你可能会找到信息:
Running a JUnit4 Test Suite in Maven using maven-failsafe-plugin Using JUnit Categories with Maven Failsafe plugin
另外,您可以定义配置文件,例如fastTest,将通过在命令行中添加参数来触发:
mvn package -PfastTests
此个人资料也会包含一些内容。
【讨论】:
正如我在问题中所说,我需要使用 maven 命令运行它。它正在按照您提到的方式工作。我基本上不想添加个人资料。 确实,配置文件管理是触发不同行为的方式。以上是关于使用 Maven 命令运行 Junit Suite的主要内容,如果未能解决你的问题,请参考以下文章
带有 @Suite 注释的 Junit5 测试套件不使用 mvn test 命令执行测试