我想在每个“何时”步骤 (Spock) 执行 takeScreen() 操作。如果不在每个“何时”步骤调用此函数,我该如何做到这一点。
def "doSomeAction"() {
when:
doSmth()
takeScreen()
then:
at SomePage
when:
doAction()
takeScreen()
then:
at SomePage
}
def takeScreen(){
//code there
}
最佳答案
你不能。有什么大不了的?
顺便说一句,假设您正在使用 Geb + Spock 来测试某种网络应用程序,以防万一 takeScreen()
是为了截取屏幕截图,为什么不直接从中获取 Geb 测试呢? GebReportingSpec
并使用 report "After login"
左右?
更新:解决方法是向您的类或仅向全局 Spock 配置添加一个辅助方法,并在 when:
或 then: 之后调用它:
。看我的answer here有关如何执行此操作的详细信息。除了(或除了)打印标签之外,您还可以做任何 takeScreen()
应该做的事情,或者只是从那里调用它。如果你想要它在 when:
的开头,确保方法被调用为 when:_ "bla"
,如果你想要它在你的例子的结尾,您可以在随后的 then:
中调用它,例如 then:_ "bla"
。但我认为你不应该那样做,在你的情况下它只是信息隐藏。测试应该准确地显示它做了什么。在我的项目中,开发人员多次在辅助方法内部遇到问题,尤其是在 Geb 中,由于题外话和过于复杂的原因无法在此处解释,因此无法对失败的测试进行截图。
关于java - 每 'when' 步执行 Action Spock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50372021/