テストデータの生成にはビルダーパターンを使用しています。これらのドメインオブジェクトには、それらの間に関係があります。私たちの機能テストでは、これらのオブジェクトを永続化する必要があります。
このモデルについて考えてみましょう。
CIのプレーンインスタンスが必要な場合はaNew().c().build()
私はそれを持続させたいのなら私はしますaNew().c().saveIn(session)
既知のBIを持つCのインスタンスが必要な場合はaNew().c().with(b).build()
さて、あなたはアイデアを得ました。私の問題は、Cを永続化する場合、Bを永続化する必要があるかどうかです。それとも、事前に永続化する必要がありますか?妥当なデフォルトBが必要な場合はどうなりますか?Dを持続させたい場合はどうなりますか?それはすべてのA、B、Cを持続させるべきですか?
もちろん、実際のシステムははるかに複雑です(循環参照がある場合もあります)。複雑なテストデータを永続化するためのベストプラクティスを探しています。
編集:私は言語の壁にぶつかったようです、私の母国語は英語ではないので、あいまいさをお詫びします。詳細は次のとおりです。
- 私がテストしようとしているのはレガシーコードではありません
- 単体テストではなく、カバレッジテストを作成しようとしています(その結果、何もモックしません)
- 私がテストしようとしているソフトウェアは、データベースにある程度のデータが入力されている場合に機能します(すべてのエンティティを使用するわけではありません)。
PS。私は可能なベストプラクティスを見つけるのに苦労しているので、遠慮なく詳細を尋ねてください。私が思いついた最も近いものは次のとおりです。
- エンティティの構築中に明示的に設定されたものを追跡します。
- 明示的に設定されたエンティティはすでに永続化されていると想定し、永続化しないでください。
- 他のすべてを永続化します(独自の永続化機能を使用)。
これは機能しますが、私のスパイダーセンスはうずきます。テストコードにロジックが含まれるため、テストなしで処理するのは非常に複雑になるため、何か間違ったことをしていると思います。
編集2:私は自分自身をより明確にしようとします。ユニットといくつかの統合テストを書き込んで実行しているときは、テストデータが保持されていないため、問題なくメモリに保存されます。
しかし、テストデータを永続化しようとすると、Hibernateはリレーションなしでエンティティを保存できません。
どうすればこの問題を克服できますか?