S2EJB3Unitでエンティティをassertするメソッド
S2EJB3Unitでエンティティをアサートするメソッドは4つ用意するつもりです。
- protected void assertEntityEquals(String message, DataSet expected, Object entity)
- protected void assertEntityEquals(String message, DataSet expected, Object entity, boolean includesRelationships)
- protected void assertEntityListEquals(String message, DataSet expected, List list) {
- protected void assertEntityListEquals(String message, DataSet expected, List list, boolean includesRelationships)
デフォルト(引数が3つのほう)ではエンティティの関連先エンティティまではassertせず、includesRelationshipsをtrueにして引数が4つのほうのメソッドを実行したときにだけ関連先エンティティを含めてassertするようにしようと思います。
たとえば下に示すようなエンティティがありEmoployeeオブジェクトをテスト対象にする場合、デフォルトではDepartmentオブジェクトのデータをassertの対象にせずEmployeeのデータのみをassertします。includesRelationshipsをtrueにするとDepartmentオブジェクトのデータもassertの対象にするということです。
@Entity public class Employee { @Id @GeneratedValue private long id; @ManyToOne private Department department; // ... }
@Entity public class Department { @Id @GeneratedValue long id; @OneToMany(mappedBy="department") private Collectionemployees = new HashSet (); // ... }
テストしたい項目って次のように2つあると思うんですね
前者のときにincludesRelationshipsをtrueにしてassertEntityEqualsを使うのがいいんじゃないかなぁと思います。いつも関連先まで取得するようにするとテストデータがちょっとでも多い場合時間がかかるんです(Lazy Loadingされるエンティティでも無理やり取得してしまうので)。