0

コントローラーメソッドをテストするスポックユニットテストを書いています。

テスト中のコントローラー アクションは、新しいドメイン インスタンス オブジェクトをインスタンス化し、保存する前に検証を呼び出します。domainInstance.validate() への呼び出しをモックする方法はありますか? または、これを実現するために、このインスタンス化と保存をサービス メソッドの背後に隠す必要がありますか?

コントローラーの単体テストのコンテキスト内では、ドメイン オブジェクトの制約が関与してはならないため、このようにします。私はそれらを他の場所でテストします (明らかに MyDomainClassTests で)。それらを考慮したい場合、私のテストは統合テストになります。

4

2 に答える 2

1

しばらくして、私が望んでいたのはかなりトリッキーだという結論に達しました。を使用する必要ないシナリオの場合はmockDomain()、groovy メタクラス メソッドとその実装を追加できます (true または false のいずれかを返します)。

既存のインスタンスをモックする必要があるためにmockDomain()が必要な場合、少なくとも今のところmockDomain()とmockDomainが実際に提供するメタクラスメソッドをいじることは混在しないため、オプションがありませ

于 2011-02-15T02:36:52.963 に答える
1

検証をドメイン インスタンス自体ではなくサービスに配置した場合は、コントローラーがそのコンストラクター (またはサービスのインターフェイス) でサービスを取得できるようにすることができます。そのサービスに検証を処理させます。

そのコントローラーの単体テストのために、そのインターフェース(サービス)のモックをコントローラーに渡し、必要なものを返すようにモックを構成します。

.net の場合、Moq をお勧めします ( http://code.google.com/p/moq/ )

于 2011-01-18T12:41:43.857 に答える