我故意导致cat实例失败。以下测试通过。
void testSomething() {
Cat.metaClass.save = {
throw new Exception("Asdasd")
}
shouldFail(Exception){
Cat cat = new Cat(name: "asd")
cat.save()
}
GroovySystem.metaClassRegistry.removeMetaClass(Cat.class)
}
但是,当我为save方法设置failOnError属性时,这会失败。如何使用metaClass更改保存以使保存(failOnError:true)抛出异常?我感谢任何帮助!谢谢!
void testSomething() {
Cat.metaClass.save = {
throw new Exception("Asdasd")
}
shouldFail(Exception){
Cat cat = new Cat(name: "asd")
cat.save(failOnError: true)
}
GroovySystem.metaClassRegistry.removeMetaClass(Cat.class)
}
执行相同测试的一种替代方法是将无效参数传递给域实例,以便验证失败并抛出异常但这在所有情况下都不起作用,因为在某些情况下域实例不需要任何参数由用户给出。因此,为了模拟域save()的失败,在这种情况下,我们需要一种模拟保存失败的方法。所以,我很感激,如果有人回答如何模拟保存,有或没有保存参数如save(flush:true),save(failOnError:true)。谢谢!
答案 0 :(得分:1)
你的第一个metaClassing save()的实例很好。
在尝试metaClass save(failOnError:true)版本时,您必须更改metaClassing语句以匹配实际使用的方法的签名。 “save()”调用与“save(failOnError:true)”调用不同。试试这个(我怀疑参数是严格输入的,所以我使用Map。:
Cat.metaClass.save = { Map map ->
throw new Exception("failOnError is true")
}