我有一个 Scala Specs 2 测试,如下所示:
import org.specs2.mutable.Specification
import org.junit.runner.RunWith
import org.junit.experimental.categories.Category
import util.categories.NightlyTestCategory
import org.specs2.runner.JUnitRunner
import org.junit.Test
import org.junit.runners.JUnit4
@RunWith(classOf[JUnitRunner])
class MyTest extends Specification {
"My Test" should {
"succeed" in {
done
}
}
}
请注意,上述测试使用自定义运行程序 JUnitRunner(来自 Specs2)来执行测试。我使用 Maven 3 来维护项目,并已将 Surefire 配置为仅包含标记为组 NightlyTestCategory 的测试:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.15</version>
<configuration>
...
<groups>util.categories.NightlyTestCategory</groups>
</configuration>
</plugin>
当我执行测试时,我希望 Maven 不会运行上述测试,因为它没有使用 Category NightlyTestCategory 进行注释。但是,Maven 确实执行了测试。奇怪的是,如果我将测试变成使用 JUnit4 运行器执行的常规 JUnit 测试,只有添加 Category NightlyTestCategory 时,Maven 才会执行此测试:
@RunWith(classOf[JUnit4])
@Category(Array(classOf[NightlyTestCategory]))
class MyTest extends Specification {
@Test
def test = println("Test")
}
对我来说,使用自定义 Specs2 运行程序 JUnitRunner 似乎会以某种方式影响 surefire 忽略组设置并简单地运行它找到的所有测试。我正在寻找一种解决方案,允许我使用 JUnitRunner 运行 specs2 测试,但同时应该尊重类别。