【发布时间】:2013-02-21 21:30:31
【问题描述】:
我有以下情况。我想将设置创建日期的责任委托给 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());
}
}
- 现在的问题是,当我通过以下方式测试主类的 createProduct 方法时 模拟productDAO,如何定义模拟对象的行为 'productDAO' 以便它设置创建日期和日志语句 不会抛出 NullPointerException?
-
上述方法看起来正确吗?我应该退回更新的产品吗 来自 ProductDAO 类的 create 方法的对象,而不是依赖于 副作用?
Product create(Product p){ p.setCreationDate(new Date()); dao.create(p); return p; } -
或者在主类中,我应该在之后从数据库中读取对象吗 创建而不是依赖于返回对象或副作用 创建产品方法?在这种情况下,唯一的事情是它会增加额外调用的开销。
public void createProduct(){ Product p = new Product(); productDAO.create(p); p = productDAO.read(p.getId()); LOG.debug(p.getCreationDate()); }
抱歉,问题太长了。希望我能解释一下。
【问题讨论】:
-
什么是
GenericDAO? -
你在使用 JPA 吗?
-
为什么不只是模拟 GenericDAO 而不是 ProductDAO?
-
GenericDAO是具有泛型类型参数的泛型 dao 类。GenericDAO<Product> dao. -
@EricGalluzzo,我正在测试 Main 类,所以我不应该只模拟直接依赖项吗?
标签: java