我有以下情况。我想将设置创建日期的责任委托给 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 方法时,如何定义模拟对象“productDAO”的行为,以便它设置创建日期并且日志语句不会抛出 NullPointerException?
上述方法似乎正确吗?我应该从 ProductDAO 类的 create 方法返回更新的 Product 对象而不是依赖副作用吗?
Product create(Product p){ p.setCreationDate(new Date()); dao.create(p); return p; }
或者在主类中,我应该在创建后从数据库中读取对象,而不是依赖于返回对象或 createProduct 方法的副作用?在这种情况下,唯一的事情是它会增加额外调用的开销。
public void createProduct(){ Product p = new Product(); productDAO.create(p); p = productDAO.read(p.getId()); LOG.debug(p.getCreationDate()); }
对不起,很长的问题。我希望我能够解释。