Maven Surefire Junit测试套件

5

我正在使用Maven Surefire插件来运行特定的测试套件。例如:

package suite;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

import suite.slow.EvenSlowerClassTest;
import suite.slow.SlowClassTest;

@RunWith(Suite.class)
@Suite.SuiteClasses({
    SlowClassTest.class,
    EvenSlowerClassTest.class
})
public class SlowSuite {

}

通过使用Maven命令

test -DrunSuite=**/FastSuite.class -DfailIfNoTests=false

我可以显式地运行FastSuite或SlowSuite测试套件,但是,如何运行我拥有的所有测试套件或未包含在测试套件中的所有测试?


<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <includes>
            <include>${runSuite}</include>
        </includes>
    </configuration>
</plugin>

mvn test会运行src/test/java下的所有测试(我没投反对票,顺便说一句) - Héctor
是的,我知道。但是如果我在surefire插件中有include指令(我已经更新了pom.xml中的问题),它会默认运行一个测试套件。如果我不添加该include,我就无法通过参数运行任何测试套件。 - luca.p.alexandru
1
你尝试过使用 -DrunSuite=**/* 吗? - Cédric Couralet
@CédricCouralet 在 maven-surefire-plugin 中不存在属性 runSuite,请查看文档。 - khmarbaise
这是一个包含的属性。@CédricCouralet帮了忙,谢谢。 - luca.p.alexandru
2个回答

1
在我们的一些项目中,我所做的是在pom.xml中使用<profiles>来激活特殊的测试套件。如果没有激活任何配置文件,则所有测试都将通过mvn test运行(我希望这就是您要寻找的内容)。
像这样:
<profile>
    <id>commit-test</id>
    <build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12.3</version>
            <configuration>
                <groups>com.test.CommitTest</groups>
            </configuration>
        </plugin>
    </plugins>
</build>

像这样注释测试类:

@Category(CommitTest.class)
public class SomeTestClass {
}

我不知道它是否适用于@Suite@RunWith,但如果您的测试套件不包含太多类,更改它应该不难。
命令:mvn clean test -Pcommit-test

Category注解从哪里来?我在junit框架中找不到它。 - luca.p.alexandru
junit-4.11 位于 org.junit.experimental.categories 下。 - Martin Hansen

1

我认为你可以尝试使用-DrunSuite=**/*Suite.class


1
maven-surefire-plugin中并不存在runSuite这样的属性。 - khmarbaise
没有“runSuite”属性可以直接使用,但是可以通过 https://dev59.com/v2gt5IYBdhLWcg3w3xEw(被接受的答案)进行定义。 - Florian H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接