我使用Geb + Spock + jUnit runner + Maven我的Specs是这样的:
@Stepwise
class My_Spec extends GebReportingSpec {
@IgnoreIf({properties['sss'].contains('true')})
def "testFeature 1" (){
println ("--> Feature 1 runs")
given:
println ("--> mySystemProp is: ${properties['sss']}")
...
when:
...
then:
...
}
def "testFeature 2" (){
println ("--> Feature 2 runs")
when:
...
then:
...
}
}
我需要用jUnit运行器运行我的Specs,因为我需要将它分组在TestSuites中。我找到了一种在testSuite运行之前设置系统属性的方法。它在jUnit 4.9中可用- @ClassRule。所以,我在这里用它。通过这种方式,我的测试套件就像:
@RunWith(Suite.class)
@Suite.SuiteClasses([
My_Spec.class,
My_Spec1.class,
My_Spec2.class
])
class TestSuite extends Specification {
@ClassRule
public static ExternalResource testRule = new ExternalResource(){
@Override
public void before() throws Throwable{
System.setProperty('sss', 'true')
}
}
}
但是@IgnoreIf行为不起作用:它没有看到添加的系统属性'sss',然而,在feature方法中这个属性是可用的:当feature运行时,它给出下一个输出:
Running TestSuite
--> Feature 1 runs
--> mySystemProp is: true
--> Feature 2 runs
所有这些都是通过maven install运行的。我的pom.xml片段:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<includes>
<include>TestSuite.*</include>
</includes>
<systemPropertyVariables>
我做错了什么?如果一切都是正确的-我怎么能使它与spock的@IgnoreIf和道具工作,我需要在jUnit TestSuite中定义?(请不要使用jUnit的@Categories。)
谢谢。
您确定properties['sss']
从传递给@IgnoreIf
的闭包中解析到正确的方法调用吗?在过去,我一直试图变得过于groovy,特别是在解析系统道具时,试图将这种简洁的表达式与静态导入一起使用。你试过把它改成System.getProperty("sss")
吗?
同样,传递给@IfIgnore
的闭包有一个委托设置为具有sys
属性的org.spockframework.runtime.extension.builtin.PreconditionContext
,因此您可以尝试sys["sss"]
。如果没有帮助,那么您可以通过将代码更改为:
@IgnoreIf({ println sys; sys["sss"].contains("true") })