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 Collection employees = new HashSet();  
  
  // ...
}

テストしたい項目って次のように2つあると思うんですね

前者のときにincludesRelationshipsをtrueにしてassertEntityEqualsを使うのがいいんじゃないかなぁと思います。いつも関連先まで取得するようにするとテストデータがちょっとでも多い場合時間がかかるんです(Lazy Loadingされるエンティティでも無理やり取得してしまうので)。