2011-07-19 58 views
0

我正在编写一个Grails服务类的unit tests。服务类使用多个域类。使用mockDomain方法为域类创建模拟就像魅力一样。即使是测试域对象是否可以正确保存的代码路径(域验证)也可以轻松编写。但是,在我的代码中,我还用一个处理异常情况的try/catch块封装了域对象操作。有没有办法模拟域操作引发异常?这可以很容易地用模拟框架,如MockitothenThrow)或EasyMockandThrow)完成,但我主要是寻找一种原生Grails的方式。我会接受补充Grails测试框架的框架。模拟抛出一个模拟域名类异常

回答

1

使用Groovy的元类很简单。对于这个例子,我会说你的一个域类是Foo。

void testFooThrowsException(){ 
    def fooInstance = new Foo() 
    fooInstance.metaClass.methodToTest = {arg1, arg2-> 
     throw new CustomException("I'm an exception") 
    } 

    shouldFail CustomException, {fooInstance.methodToTest("val1", "val2")} 
} 

修改实例的元类后,该实例将具有修改后的完整生命周期行为。它是Groovy,IMO最酷的部分之一。

相关问题