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)
}
:それはメタプログラミングを使用していた仕事をして