【问题标题】:Run tests from a @Category using Maven使用 Maven 从 @Category 运行测试
【发布时间】:2012-01-15 07:31:16
【问题描述】:

我查看了其他一些 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,还有人有什么建议吗?谢谢。

【问题讨论】:

    标签: java maven junit categories maven-surefire-plugin


    【解决方案1】:

    做了更多的研究,没有找到任何选择,所以我最终使用了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
    

    【讨论】:

    【解决方案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 Plugin surefire:test

    【讨论】:

    • 非常感谢有关 junit 提供者的提示!!!与记录的相反,它应该是自动选择的。但显然情况并非如此。
    • @JanGoyvaerts 回复:junit 提供者,我已经提出了一个问题。它应该在 2.12.1 中修复,但我需要提供一个补丁 :-)
    • 我通过明确请求 junit47 提供程序使其最终工作。恐怕故障保护也有同样的问题。
    • 以防万一……我在 Surefire jira.codehaus.org/browse/SUREFIRE-832 提出的罚单。但我认为提供商的某个地方也存在稳定性问题。在将其用于 Surefire 和 Failsafe 时,系统几乎停止运行。
    猜你喜欢
    • 2011-06-25
    • 2016-03-13
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多