如何使特征方法成为条件
How do you make a feature method conditional
在我的测试中,我有一些特征方法只需要 运行 在某些情况下。我的代码看起来像这样:
class MyTest extends GebReportingSpec{
def "Feature method 1"(){
when:
blah()
then:
doSomeStuff()
}
def "Feature method 2"(){
if(someCondition){
when:
blah()
then:
doSomeMoreStuff()
}
}
def "Feature method 3"(){
when:
blah()
then:
doTheFinalStuff()
}
}
我应该注意,我使用的是自定义 spock 扩展,它允许我 运行 规范的所有特征方法,即使以前的特征方法失败也是如此。
我刚刚意识到的事情和我做这个 post 的原因是因为 "Feature method 2" 由于某种原因没有出现在我的测试结果中,但是方法 1 和 3 出现了。即使 someCondition
设置为 true,它也不会出现在构建结果中。所以我想知道为什么会这样,以及如何使这个特征方法成为条件
为了解决这个问题,我只是在 if 语句之前放置了一个具有 10 毫秒休眠的 when/then 块,现在正在执行该功能方法
您的测试没有出现在报告中,因为您不能在条件语句中包含 given
、when
、then
块。
您应该始终 运行 测试,但允许测试优雅地失败:
使用 @FailsWith
属性。 http://spockframework.org/spock/javadoc/1.0/spock/lang/FailsWith.html
@FailsWith(value = SpockAssertionError, reason = "Feature is not enabled")
def "Feature method 2"(){
when:
blah()
then:
doSomeMoreStuff()
}
重要的是要注意,当此测试因指定异常而失败时,将报告为 passed。如果启用该功能并且测试实际通过,它也会报告为 passed。
Spock 对条件执行功能有特别的支持,看看@IgnoreIf and @Requires。
@IgnoreIf({ os.windows })
def "I'll run everywhere but on Windows"() { ... }
你也可以在条件闭包中使用静态方法,他们需要使用限定版本。
class MyTest extends GebReportingSpec {
@Requires({ MyTest.myCondition() })
def "I'll only run if myCondition() returns true"() { ... }
static boolean myCondition() { true }
}
在我的测试中,我有一些特征方法只需要 运行 在某些情况下。我的代码看起来像这样:
class MyTest extends GebReportingSpec{
def "Feature method 1"(){
when:
blah()
then:
doSomeStuff()
}
def "Feature method 2"(){
if(someCondition){
when:
blah()
then:
doSomeMoreStuff()
}
}
def "Feature method 3"(){
when:
blah()
then:
doTheFinalStuff()
}
}
我应该注意,我使用的是自定义 spock 扩展,它允许我 运行 规范的所有特征方法,即使以前的特征方法失败也是如此。
我刚刚意识到的事情和我做这个 post 的原因是因为 "Feature method 2" 由于某种原因没有出现在我的测试结果中,但是方法 1 和 3 出现了。即使 someCondition
设置为 true,它也不会出现在构建结果中。所以我想知道为什么会这样,以及如何使这个特征方法成为条件
为了解决这个问题,我只是在 if 语句之前放置了一个具有 10 毫秒休眠的 when/then 块,现在正在执行该功能方法
您的测试没有出现在报告中,因为您不能在条件语句中包含 given
、when
、then
块。
您应该始终 运行 测试,但允许测试优雅地失败:
使用 @FailsWith
属性。 http://spockframework.org/spock/javadoc/1.0/spock/lang/FailsWith.html
@FailsWith(value = SpockAssertionError, reason = "Feature is not enabled")
def "Feature method 2"(){
when:
blah()
then:
doSomeMoreStuff()
}
重要的是要注意,当此测试因指定异常而失败时,将报告为 passed。如果启用该功能并且测试实际通过,它也会报告为 passed。
Spock 对条件执行功能有特别的支持,看看@IgnoreIf and @Requires。
@IgnoreIf({ os.windows })
def "I'll run everywhere but on Windows"() { ... }
你也可以在条件闭包中使用静态方法,他们需要使用限定版本。
class MyTest extends GebReportingSpec {
@Requires({ MyTest.myCondition() })
def "I'll only run if myCondition() returns true"() { ... }
static boolean myCondition() { true }
}