2

Spring Rooを試してみようと思ったので、今日はたくさんの新しい楽しい問題がありました。うまくいけば、皆さんは最新のもので私を助けることができます。Rooにはエンティティの統合テストを生成する機能がありますが、ほとんどの場合失敗します。最も一般的な失敗は、nullがnull以外のフィールドに挿入されているなどの何らかの形の制約違反です。私のエンティティには、データベースにこれらの制約を反映するものが何もないことに気づきました。

たとえば、プロパティエンティティはTermと多対1の関係にあります

//bi-directional many-to-one association to Term
    @ManyToOne
@JoinColumn(name="TERM_ID",)
private Term term;

これを次のように変更します。

//bi-directional many-to-one association to Term
@ManyToOne(optional=false)
@JoinColumn(name="TERM_ID", nullable=false)
private Term term;

それでもテストは失敗するので、RooがTermエンティティを自動的に作成するのに十分賢いかどうかはわかりません。

だから私の質問は、Rooが再起動時にそれらを上書きすることなく、これらの生成されたテストを変更できるかどうかです。または、Rooはnull以外の値を設定できる必要がありますか?

統合テストや、生成されたクラスで何ができるかについては、実際には多くのドキュメントがありません。私は少なくとも見つけることができた:)

ありがとう

4

1 に答える 1

1

私はこの問題に自分で遭遇しました。この質問は2年前のものですが、質問のスターターも解決策を見つけてくれることを願っています。うまくいけば、私の答えは他の人に役立つでしょう。

どうやらRooは、正しい統合テストを生成するために、JPA制約の代わりにJSR303からの検証を使用しているようです。

JPAはデータベースに制約を課しますが、アプリケーションロジックには制約を課しません。Rooに正しい統合テストを生成させるには、アプリケーションロジックと同じ制約も指定する必要があります。両方を使用するには、JPAとJSR303のアノテーションを使用するだけです。

...
import javax.validation.constraints.NotNull;
....

@ManyToOne(optional=false)
@JoinColumn(name="TERM_ID", nullable=false)
@NotNull
private Term term;
于 2012-10-12T09:00:53.760 に答える