次のシナリオがあります。作成日設定の責任をDAOオブジェクトに委任したい。
Class Product{
//other fields
Date creationDate;
}
Class ProductDAO{
private GenericDAO dao;
public void create(Product p){
p.setCreationDate(new Date());
dao.create(p);
}
}
Class Main{
private ProductDAO productDAO;
public void createProduct(){
Product p = new Product();
productDAO.create(p);
LOG.debug(p.getCreationDate());
}
}
- ここで問題となるのは、productDAOをモックしてメインクラスのcreateProductメソッドをテストするときに、作成日を設定し、ログステートメントがNullPointerExceptionをスローしないように、モックオブジェクト「productDAO」の動作を定義する方法です。
上記のアプローチは正しいと思われますか?副作用に頼るのではなく、ProductDAOクラスのcreateメソッドから更新されたProductオブジェクトを返す必要がありますか?
Product create(Product p){ p.setCreationDate(new Date()); dao.create(p); return p; }
または、Mainクラスでは、戻りオブジェクトやcreateProductメソッドの副作用に依存するのではなく、作成後にデータベースからオブジェクトを読み取る必要がありますか?この場合の唯一のことは、余分な呼び出しを行うオーバーヘッドが追加されることです。
public void createProduct(){ Product p = new Product(); productDAO.create(p); p = productDAO.read(p.getId()); LOG.debug(p.getCreationDate()); }
長い質問でごめんなさい。説明できたと思います。