0

我已经查看了一些其他的 SO 问题,例如thisthis。但是这些问题已经过时了,我很好奇是否存在新的解决方案。

这是我的设置的样子:

分类界面:

public interface FastTest{}

类别套件:

@RunWith(Categories.class)
@IncludeCategory(FastTest.class)
public class FastSuite{}

样品测试:

@Category(FastTest.class)
public class FastTests{

    @Test public void assertOneFastTest(){}

    @Test public void assertTwoFastTest(){}
}

使用 maven,假设我只想运行我所有的FastTest测试。理想情况下,我会使用命令

mvn test -Dtest.category=FastTest

或者

mvn test -Dtest.suite=FastSuite

但我无法让这个工作。除了使用ClasspathSuite之外,还有没有人有任何建议?谢谢。

4

2 回答 2

2

您可以使用组配置从 surefire 插件中执行此操作,但您还需要指定 junit47 提供程序。以下对我有用:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.11</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>2.11</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <id>default-test</id>
            <phase>test</phase>
            <goals>
                <goal>test</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <groups>com.xxx.foo.CategoryClass</groups>
    </configuration>
</plugin>

我认为这是最近才引入的,因此可能不适用于插件的早期版本,即 2.11 之前的版本。你需要指定提供者,否则它不起作用。这些组应该是 Category 类的完全限定名称。如果需要,您也可以指定 excludeGroups。

有关更多信息,请参阅Maven Surefire 插件 surefire:test

于 2011-12-07T22:31:44.527 回答
0

做了更多的研究,没有发现任何选择,所以我最终使用了ClasspathSuite。事实证明,除了你不能在类级别指定 @Category 之外,它没有任何不同,你必须注释你想要分类的每个方法

现在,每个类别套件如下所示:

@RunWith(Categories.class)
@Categories.IncludeCategory(FastTest.class)
@Suite.SuiteClasses(AllTests.class)
public class FastSuite{}

您必须修改AllTests为如下所示:

@RunWith(ClasspathSuite.class)
public class AllTests{}

对于方法,它看起来像这样:

public class FastTests{

    @Categories(FastTest.class)
    public void assertOneFastTest(){}

    @Categories(FastTest.class)
    public void assertTwoFastTest(){}
}

使用 maven,您可以执行以下命令:

mvn test -Dtest=FastSuite -Dt3-chrome-path=%CHROME_DRIVER_HOME -Dwebdriver.chrome.driver=%CHROME_DRIVER_HOME
于 2011-12-07T22:06:02.543 回答