【发布时间】:2012-02-13 16:02:48
【问题描述】:
对以下内容进行单元测试/集成测试的最佳方法是什么:
@Service("fooService")
public class FooService {
@Resource(name = "sessionFactory")
private SessionFactory sessionFactory;
/*** Get all **/
@Transactional(readOnly = true)
public List<Foo> getAllFoos() {
final Session session = sessionFactory.getCurrentSession();
final Criteria crit = session.createCriteria(Foo.class);
return crit.list();
}
}
我很高兴使用 mockito,但不确定如何利用它的用处。我见过的大多数情况都需要将 dao/mock dao 作为方法参数传入。
显然,我会推断出更复杂的方法。
【问题讨论】:
-
这就是 dao - 仅仅因为它的名字有服务并不能让它如此。模拟 Session 等并没有什么好处——除非你有很多逻辑。我会针对内存数据库运行集成测试。
-
@BedwyrHumphreys 我称它为服务是因为我在其中放置了很多应用程序逻辑(显然这种方法相当简单),并且只需使用 hibernate 来完成所有正常的 dao 工作(保存、更新、选择,删除),并没有真正看到为访问休眠会话的〜2行创建整个dao层的意义。所以你认为加载一个应用程序上下文并在不模拟任何东西的情况下对 db 运行测试是要走的路吗?
-
绝对 - 想想你在这里要测试什么:这些方法是否从数据库返回它们应该返回的内容。在这里模拟会话和标准没有多大意义。
-
是的,我本来就是这么想的,谢谢。
标签: java hibernate spring unit-testing integration-testing