在我的测试中,我有一些功能方法只需要在某些情况下运行。我的代码看起来像这样:
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扩展,即使以前的特征方法失败,也允许我运行规范的所有特征方法。
我刚才意识到的事情以及我发布这篇文章的原因是因为“功能方法2”由于某种原因没有出现在我的测试结果中,但方法1和3确实如此。即使someCondition
设置为true,它也不会出现在构建结果中。所以我想知道为什么会这样,以及如何使这个特征方法成为条件
答案 0 :(得分:3)
Spock特别支持有条件执行的功能,请查看@IgnoreIf和@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 }
}
答案 1 :(得分:1)
您的测试未显示在报告中,因为您无法在条件中包含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()
}
重要的是要注意,当测试失败并指定异常时,此测试将报告为传递。如果启用该功能并且测试实际通过,它也将报告为传递。
答案 2 :(得分:0)
要解决这个问题,我只需在if语句之前使用10 ms的休眠时间放置一个when / then块,现在该功能方法正在执行