[英]My grails project facing error“TransactionRequiredException:no transaction” using domain.save(flush:true).save() it can is saving but updating
[英]making domain.save(failOnError:true) fail when doing integration tests
我故意使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")
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.