エンティティがあります。他のエンティティ、例えばCategory
を集約するProduct
。これらのエンティティは、他のエンティティなどを集約することもできます。今私はデータベースへの私のクエリをテストする必要があります。Spring、JPA - 他のエンティティの推移的依存性の多いエンティティのCRUDの統合テスト
私はEntityManager
というモックを作成します。しかし、私が正しい機能をテストするために必要なより複雑なクエリを持っているとどうでしょうか。それからエンティティ(またはそれ以上のもの)を永続させ、何かを取得/更新しようとする必要があります。私もProduct
が依存するすべてのエンティティを維持する必要があります。
私はそのようなアプローチが嫌いです。そのようなクエリをテストする最良の方法は何ですか?
返信いただきありがとうございます。
更新 - 例えば
エンティティ構造
この構造は、JPA実装によって維持されている次の想定します。例えばProduct
クラスは、だから今、私は、データベース内のProduct
を作成する必要がDAOで使用される任意のクエリをテストする場合は、この
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@ManyToOne
private Category category;
@ManyToOne
private Entity1 something;
}
ようになりますが、それはCategory
とEntity1
に依存しており、値がそう@ManyToOne
注釈がありますnull
にはできません。ですから、私はそれらのエンティティも永続化する必要がありますが、依存関係も持っています。
私は大量のコードを救う(@chalimartinesで述べた)SQLスクリプトまたはDbUnitをを使用して試験前Category
、Entity1
とEntity2
このような前作成エンティティを検討しているが、私はそれが良い解決策であるかどうかわかりません。このようなテストのベストプラクティスを知りたいと思います。
を永続化するために避けるために、nullにの依存性を設定するカント
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
として更新
を使用することができます。私はSpringのコンテキストでテストする方法を知っています。私は、 'Product'エンティティが依存するエンティティを手動で作成して永続化することは望ましくありません。これらのエンティティは他のエンティティにも依存している可能性があるので、 'Product'を取得するクエリをテストするために多くのエンティティを永続させることになります。 – kurochenko
これらのエンティティを作成して永続化したくない場合は、そのエンティティを作成するか、既存のエンティティを使用しないでください。具体的な例を与える –
いいえ私は例を追加しました、そして今私はそれが私が理解していないものであることは明らかです – kurochenko