我查看过其他一些问题,例如this和this。但是这些问题已经过时了,我很好奇是否存在新的解决方案。
以下是我的设置:
类别界面:
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之外,有没有人有任何建议?感谢。
答案 0 :(得分: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。
答案 1 :(得分: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