我故意使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更改保存,以使save(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))进行模拟,我将不胜感激。谢谢!
最佳答案
您的metaClassing save()的第一个实例很好。
尝试对save(failOnError:true)版本进行metaClass时,必须更改metaClassing语句以匹配实际使用的方法的签名。 “save()”调用与“save(failOnError:true)”调用不同。试试这个(我怀疑参数是严格输入的,所以我正在使用Map。
Cat.metaClass.save = { Map map ->
throw new Exception("failOnError is true")
}
关于grails - 进行集成测试时使domain.save(failOnError:true)失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38220338/