2012-01-18 13 views
1

私はトップレベルの抽象クラスを持つドメインオブジェクト階層を持っています。 GORMでは、彼らは次のように定義することができます。Grailsユニットテストで抽象ドメインクラスのインスタンスを取得するにはどうすればよいですか?

abstract class Dog { 
... 
} 

class Collie extends Dog { 
... 
} 

今私はユ​​ニットそうのように、犬IDを渡されるコントローラをテストしたいと思います:

//in the unit test 
new Collie(id:1).save(validate:false) 
params.id = 1 
controller.show() 

//in the tested controller 
def dog = Dog.get(params.id) 

これは実際のGORMで動作しますが、残念ながら、@Mock(Dog)またはmockDomain(Dog)を使用できないため、GORM実装のテストで返されるものはありません(そうすることで、Dogが抽象クラスであるため例外が返されます)。で十分ではありません(たとえ実際の模擬オブジェクトが実際にCollieインスタンスであっても)。

ヒントこれは、最も明白な方法ではありません、あなたが実際にあなたのユニットテストで複数のサブクラスを使用します。ここで、それが複雑に得ることができる

Dog.metaClass.static.get = { Long id -> 
    return Collie.get(id) 
} 

:それはメタプログラミングを使用していた仕事をして

答えて

3

だから、一つの解決策は、私が思いつきましただから、誰かが正しくそれを行う方法を知っていれば、貢献してください。

関連する問題