我有2种测试方法。
他们都执行where块的每一行,我需要清理add& amp;放松方法。
我已经尝试过cleanup block,void cleanup(),def cleanupSpec(),非套装。
如何在具有“where:”阻止的特定方法后显式运行清理?
def "Add"() {
setup :
expect :
where:
}
def "Relax"() {
setup :
expect :
where:
}
答案 0 :(得分:13)
您可以在方法中使用清理块,如下所示:
@Unroll
def "a method that tests stuff"(){
given:
def foo = fooDAO.save(new Foo(name: name))
when:
def returned = fooDAO.get(foo.id)
then:
returned.properties == foo.properties
cleanup:
fooDAO.delete(foo.id)
where:
name << ['one', 'two']
}
“清理”块将在每次测试迭代时运行一次。
答案 1 :(得分:4)
如果您使用@Unroll
,则会为cleanup:
块中的每个条目调用where:
。要仅运行清理一次,请将代码移到def cleanupSpec()
关闭内。
@Shared
def arrayOfIds = []
@Unroll
def "a method that tests stuff"(){
given:
def foo = fooDAO.save(new Foo(name: name))
when:
def returned = fooDAO.get(foo.id)
arrayOfIds << foo.id
then:
returned.properties == foo.properties
where:
name << ['one', 'two']
}
def cleanupSpec() {
arrayOfIds.each {
fooDAO.delete(it)
}
}
答案 2 :(得分:0)
cleanupSpec()
不可用,因为它是在所有规格测试之后而不是最后一个“ where”项之后调用的。
如果您的规范将包含多个测试,则数据库将仍然充满“一种测试材料的方法”中的材料,直到该文件中的所有测试都将完成。