2011-07-19 2 views
0

Grailsサービスクラスに対してunit testsと書いています。サービスクラスは、複数のドメインクラスを使用します。ドメインクラスのモックを作成するには、mockDomainメソッドを使用してチャームのように動作します。ドメインオブジェクトを正しく保存できるかどうかをテストするコードパス(ドメイン検証)も簡単に記述できます。しかし、私のコードでは、例外オブジェクトを扱うブロックtry/catchでドメインオブジェクト操作をラップしました。ドメイン操作が例外をスローすることをシミュレートする方法はありますか? MockitothenThrow)やEasyMockandThrow)のようなMockフレームワークで簡単に行うことができますが、主にGrailsのネイティブな方法を探しています。私は、Grailsのテストフレームワークを補完するフレームワークを公開しています。模擬ドメインクラスの例外をスローするシミュレーション

答えて

1

これはGroovyのメタクラスを使って簡単です。この例では、あなたのドメインクラスの1つが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")} 
} 

インスタンスのメタクラスを変更すると、インスタンスのライフサイクル全体が変更されます。 Read more on metaclassing on the Groovy site.これはGroovy、IMOの最もクールな部分の1つです。

関連する問題