繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM