Spock的@IgnoreIf闭包看不到在jUnit的套件中设置的系统属性变量



我使用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") })

相关内容

  • 没有找到相关文章

最新更新