如何使用方法评估Spock @IgnoreIf

时间:2017-05-16 23:36:11

标签: groovy spock

根据以下文章:

https://dzone.com/articles/spocklight-ignore

您应该能够使用静态方法评估Spock @IgnoreIf注释。我完全按照文章中的方法尝试了isOsWindows()方法,并获得了以下内容:

org.spockframework.runtime.extension.ExtensionException: Failed to evaluate @IgnoreIf condition
...
Caused by: groovy.lang.MissingMethodException: No signature of method: MySpec$__spock_feature_1_3_closure1.isOsWindows() is applicable for argument types: () values: []

有没有人对此有任何见解?我真的只想设置每个规范的真/假,我不需要其他示例中列出的任何os /系统属性。

谢谢

1 个答案:

答案 0 :(得分:4)

示例有点过时Code written with Spock 0.7-groovy-2,如果要使用静态方法,则需要使用限定版本ClassName.method()

package com.mrhaki.spock

import spock.lang.*

class SampleRequiresSpec extends Specification {

    private static boolean isOsWindows() {
        System.properties['os.name'] == 'windows'
    }

    @IgnoreIf({ SampleRequiresSpec.isOsWindows() })
    def "run only if run on non-windows operating system"() {
        expect:
        true
    }
}

如果您只想在Windows上运行,那么内置一些便利功能(Spock 1。+)。

  • 操作系统@IgnoreIf({ os.windows || os.linux || os.macOs || os.solaris || os.other })
  • Java版@IgnoreIf({ jvm.java5 || jvm.java6 || jvm.java7 || jvm.java8 || jvm.java9 })
  • 环境变量@IgnoreIf({ !env.containsKey("FOOBARBAZ") }) @IgnoreIf({ env["FOOBARBAZ"] == 'false'})
  • SystemProperty @IgnoreIf({ !sys.contains("java.version") }) @IgnoreIf({ sys["java.version"] == '1.6' })