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

标签 grails integration-testing

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

相关文章:

grails - 在 Grails Spring Security 插件中将 AccessDecisionManager 更改为 UnanimousBased

c# - WatiN 和 IE9 关于多个对话框的问题

ruby-on-rails - 在 capybara 中使用execute_script时如何返回值?

javascript - WebdriverIO browser.click 给出错误 "Other element would receive the click"。我该如何解决?

java - DBUnit PostgresqlDataTypeFactory 不识别枚举列表

grails - 指定的依赖定义编译无效

grails - 如何管理发送到我的 grails 的文件

grails - 身份验证失败-Grails无法提供凭据

java - 集成测试和 UI 更改

Grails Controller 操作抽象命令对象参数