3

我正在努力使用 Spring 3 迁移到 Hibernate 4,这意味着我不能再使用 Spring 的 HibernateTemplate。重构代码很容易(在使用会话的地方用 sessionFactory.getCurrentSession() 替换回调),但我的单元测试遇到了问题。特别是,我希望对我的 DAO 进行完全实时的集成测试——不使用 @Transactional。

但是,由于 HibernateTemplate 不再提供在会话未打开时打开会话的方法,因此我得到“没有为当前线程找到会话”。当我运行测试时,因为 sessionFactory.getCurrentSession() 如果会话未打开,则不会打开会话。

有没有办法解决这个问题来复制 HibernateTemplate 给我的东西,而无需在我的测试中使用 @Transactional?似乎它应该是可能的,但我只能在我用 @Transactional 注释测试类时让测试工作(因为它确实打开了一个会话)。

4

1 回答 1

-2

如果你使用 Junit 测试它非常简单。

在您的测试类中,您必须加载 Spring 上下文:

@BeforeClass
public static void createApplicationContext(){      
    try {           
         applicationContext = new ClassPathXmlApplicationContext(
                new String[] {"applicationContext.xml"});           
         yourDao = (YourDao)applicationContext.getBean("YourDao");           
    } catch (Exception e) {
        Assert.assertNull(e);
    }
}

然后您可以使用yourDao和编写测试逻辑。

于 2013-01-16T12:20:00.480 回答