[Grails (グレイルズ)] Unitテストで、親子関係にある Domain の unique をテストする。

注意点としては、子の DomainID が同じものではなく、同じオブジェクトを使う事。
特に、Spockなど setup でターゲットとなる Domain を生成してる場合など注意。

通常 Domainunique のテストは以下のようになる。
この場合は、Integer someNumber 単位でユニークになるだけなので単純。

そのテスト
同じ Integer someNumber に対して同じ name を入れるだけ。

結果は、 同じ someNumber の時に同じ name は入らないので unique エラーになる。

この someNumber が Integer が他の Domain の場合(親子関係にある場合) 以下のようになる。

子となる Domain の定義

UniqueDomainsomeNumber を上で定義した子 Domain にして 親子関係にする。さらに unique 制約も ChildDomain 単位にする

テストは以下のようになる。
同じ子の Domain に対して同じ name を付ければエラーとなる確認。

Spockを使っている時に、以下のようにすると間違い。
ID が同じでも、別のオブジェクトだと駄目。 setup と、 実際のテストで別のオブジェクトを生成してしまっている。

正しくは、ChildDomain は使いまわせるように宣言しておくとよい。







コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください