4

我使用 Geb + Spock + jUnit runner + Maven 我的规格如下:

@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 runner 运行我的 Specs,因为我需要在 TestSuites 中对其进行分组。我找到了一种在 testSuite 运行之前设置系统属性的方法。它在 jUnit 4.9 - @ClassRule 中可用。所以,我在这里使用它。通过这种方式,我的 TestSuites 就像:

    @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' 但是,在功能方法中,此属性可用:当功能运行时,它会给出下一个输出:

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。)

谢谢。

4

1 回答 1

0

您确定properties['sss']从传递给的闭包中解析为正确的方法调用@IgnoreIf吗?过去我一直试图过于时髦,特别是在解决系统道具时尝试使用这种带有静态导入的简洁表达式。您是否尝试将其更改为System.getProperty("sss")?

此外,传递给的闭包@IfIgnore有一个委托集,org.spockframework.runtime.extension.builtin.PreconditionContext它有sys属性,所以你可以尝试sys["sss"]。如果这没有帮助,那么您可以通过将代码更改为来调试闭包中可用的属性:

@IgnoreIf({ println sys; sys["sss"].contains("true") })
于 2015-10-05T07:35:20.810 回答