【问题标题】:Execute action every 'when' step Spock执行每个“何时”步骤 Spock 的操作
【发布时间】:2018-05-16 13:16:48
【问题描述】:
我想在每个“何时”步骤 (Spock) 中执行 takeScreen() 操作。如果不在每个“何时”步骤中调用此函数,我怎么能做到这一点。
def "doSomeAction"() {
when:
doSmth()
takeScreen()
then:
at SomePage
when:
doAction()
takeScreen()
then:
at SomePage
}
def takeScreen(){
//code there
}
【问题讨论】:
标签:
java
testing
groovy
spock
qa
【解决方案1】:
你不能。有什么大不了的?
顺便说一句,假设您正在使用 Geb + Spock 测试某种 Web 应用程序,以防万一 takeScreen() 用于截屏,您为什么不直接从 GebReportingSpec 导出您的 Geb 测试并使用 @987654324 @ 左右?
更新:一种解决方法是向您的类添加一个小助手方法,或者只是向全局 Spock 配置添加一个小助手方法,然后在 when: 或 then: 之后调用它。有关如何执行此操作的详细信息,请参阅我的 answer here。除了(或除此之外)打印标签之外,您还可以做任何takeScreen() 应该做的事情,或者只是从那里调用它。如果你想要它在when: 的开头,请确保该方法被称为when:_ "bla",如果你想要它在你的示例中的末尾,你可以在随后的then: 中调用它,比如then:_ "bla"。但我认为你不应该那样做,在你的情况下,这只是信息隐藏。测试应该准确地显示它的作用。在我的项目中,开发人员多次在辅助方法内部遇到问题,尤其是在 Geb 中,由于跑题且过于复杂而无法在此处解释的原因导致测试失败而截屏。