gpt4 book ai didi

grails - 进行集成测试时使domain.save(failOnError:true)失败

转载 作者:行者123 更新时间:2023-12-02 15:19:58 26 4
gpt4 key购买 nike

我故意使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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com