2012-04-03 5 views
0

エンティティがあります。他のエンティティ、例えばCategoryを集約するProduct。これらのエンティティは、他のエンティティなどを集約することもできます。今私はデータベースへの私のクエリをテストする必要があります。Spring、JPA - 他のエンティティの推移的依存性の多いエンティティのCRUDの統合テスト

私はEntityManagerというモックを作成します。しかし、私が正しい機能をテストするために必要なより複雑なクエリを持っているとどうでしょうか。それからエンティティ(またはそれ以上のもの)を永続させ、何かを取得/更新しようとする必要があります。私もProductが依存するすべてのエンティティを維持する必要があります。

私はそのようなアプローチが嫌いです。そのようなクエリをテストする最良の方法は何ですか?

返信いただきありがとうございます。


更新 - 例えば

エンティティ構造 enter image description here

この構造は、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;  
} 

ようになりますが、それはCategoryEntity1に依存しており、値がそう@ManyToOne注釈がありますnullにはできません。ですから、私はそれらのエンティティも永続化する必要がありますが、依存関係も持っています。

私は大量のコードを救う(@chalimartinesで述べた)SQLスクリプトまたはDbUnitをを使用して試験前CategoryEntity1Entity2このような前作成エンティティを検討しているが、私はそれが良い解決策であるかどうかわかりません。このようなテストのベストプラクティスを知りたいと思います。

答えて

1

あなたはあなたが彼らにあなたは多分私を誤解しました

+0

を永続化するために避けるために、nullにの依存性を設定するカント@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)

@ContextConfiguration(locations={"classpath:/path/to/your/applicationContextTest.xml"}) @RunWith(SpringJUnit4ClassRunner.class) @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) public class YourClassTest { @Test public void test() { //your crud } } 

として更新

を使用することができます。私はSpringのコンテキストでテストする方法を知っています。私は、 'Product'エンティティが依存するエンティティを手動で作成して永続化することは望ましくありません。これらのエンティティは他のエンティティにも依存している可能性があるので、 'Product'を取得するクエリをテストするために多くのエンティティを永続させることになります。 – kurochenko

+0

これらのエンティティを作成して永続化したくない場合は、そのエンティティを作成するか、既存のエンティティを使用しないでください。具体的な例を与える –

+0

いいえ私は例を追加しました、そして今私はそれが私が理解していないものであることは明らかです – kurochenko

1

私は他の方法はわかりませんが、Productとその依存関係を維持するために、データベースフレームワークのセットアップに役立つテストフレームワークDBunitを使用できます。

関連する問題