2016-07-06 90 views
0

我故意导致cat实例失败。以下测试通过。使domain.save(failOnError:true)在进行集成测试时失败

void testSomething() {        

     Cat.metaClass.save = { 

      throw new Exception("Asdasd") 
     } 

     shouldFail(Exception){ 

      Cat cat = new Cat(name: "asd") 
      cat.save() 

     } 


     GroovySystem.metaClassRegistry.removeMetaClass(Cat.class) 


    } 

但是,当我为保存方法设置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) 


    } 

一种替代方法做同样的试验是无效的参数传递到域实例,以便验证失败,并抛出异常,但因为在某些情况下,域实例没有按”这不会在所有情况下工作t需要用户给出的任何参数。因此,为了模拟域save()的失败,我们需要一种方法来模拟保存失败。所以,我很感激,如果有人已经回答了如何保存或不保存参数如save(flush:true),save(failOnError:true)。谢谢!

回答

1

你的第一个metaClassing的save()很好。

尝试metaClass save(failOnError:true)版本时,必须更改metaClassing语句以匹配实际采用的方法的签名。 “save()”调用与“save(failOnError:true)”调用不同。试试这个(我怀疑参数是严格键入的,所以我使用的是Map。:

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