【问题标题】:making domain.save(failOnError:true) fail when doing integration tests进行集成测试时使 domain.save(failOnError:true) 失败
【发布时间】:2016-11-08 06:55:32
【问题描述】:

我故意导致 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) 等保存参数来模拟保存,我将不胜感激。谢谢!

【问题讨论】:

    标签: grails integration-testing


    【解决方案1】:

    您对 save() 进行元分类的第一个实例很好。

    当尝试对 save(failOnError: true) 版本进行元分类时,您必须更改元分类语句以匹配实际使用的方法的签名。 “save()”调用与“save(failOnError:true)”调用不同。试试这个(我怀疑参数是严格类型的,所以我使用的是 Map。:

    Cat.metaClass.save = { Map map -> 
        throw new Exception("failOnError is true")
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      相关资源
      最近更新 更多