Java 尝试使用Hibernate和Can'对进行DB查询的类进行单元测试;无法创建会话
我试图为使用Hibernate执行DB查询的类实现JUnit测试。当我创建被测试的类时,通过执行以下操作,我可以通过工厂访问会话:Java 尝试使用Hibernate和Can'对进行DB查询的类进行单元测试;无法创建会话,java,hibernate,orm,junit,jndi,Java,Hibernate,Orm,Junit,Jndi,我试图为使用Hibernate执行DB查询的类实现JUnit测试。当我创建被测试的类时,通过执行以下操作,我可以通过工厂访问会话: InitialContext context = new InitialContext(); sessionFactory = (SessionFactory) context.lookup(hibernateContext); 当我将其部署到JBoss 5.1时,它可以正常工作。我正试图找出如何让它与我的JUnit测试一起工作。我不断收到一个异常,声明“需要在环
InitialContext context = new InitialContext();
sessionFactory = (SessionFactory) context.lookup(hibernateContext);
当我将其部署到JBoss 5.1时,它可以正常工作。我正试图找出如何让它与我的JUnit测试一起工作。我不断收到一个异常,声明“需要在环境或系统属性中指定类名,或者作为小程序参数,或者在应用程序资源文件中指定类名:java.naming.factory.initial”。我已经到处找了,但是没有找到任何关于我需要做什么才能让它工作的信息。我不使用Spring或任何框架,只使用普通的Java和JUnit。在单元测试环境中,您很可能不想从JNDI获得会话工厂(您不想启动JBoss进行单元测试),我的建议是使用好的老式
HibernateUtil
。下面是一个非常基本的示例:
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory();
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
以防万一,示例应用程序(本机版本)有一个更高级的版本,可以从静态变量或JNDI查找获得全局SessionFactory(因此您可以在容器内外使用相同的代码)
就我个人而言,很长一段时间以来,我一直在使用卡梅隆·麦肯齐(Cameron McKenzie)的作品
然后,从SessionFactory
获取一个Session
,并开始/提交/回滚单元测试中每个方法的事务