我正在尝试为使用 Hibernate 执行数据库查询的类实现 JUnit 测试。当我创建被测类时,我通过执行以下操作通过工厂访问 session :
InitialContext context = new InitialContext();
sessionFactory = (SessionFactory) context.lookup(hibernateContext);
当我将它部署到 JBoss 5.1 时,它工作正常。我想弄清楚如何让它与我的 JUnit 测试一起使用。我不断收到一个异常,指出我“需要在环境或系统属性中指定类名,或作为小程序参数,或在应用程序资源文件中指定类名:java.naming.factory.initial”。我进行了高低搜索,但未能找到任何关于我具体需要做什么才能使其正常工作的信息。我没有使用 Spring 或任何框架,只使用普通的旧 Java 和 JUnit。
最佳答案
在单元测试上下文中,您很可能不想从 JNDI 获取 session 工厂(您不想启动 JBoss 进行单元测试),我的建议是使用一个很好的旧 HibernateUtil
helper class .下面是一个非常基本的示例:
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;
}
}
以防万一,caveat emptor示例应用程序( native 版本)有一个更高级的版本,可以从静态变量或 JNDI 查找中获取全局 SessionFactory(因此您可以在容器内外使用相同的代码)。
就我个人而言,我用过 the one来自 Cameron McKenzie 很长一段时间。
然后,从 SessionFactory
获取一个 Session
并开始/提交/回滚单元测试中每个方法的事务。
关于java - 尝试对使用 Hibernate 进行数据库查询且无法创建 session 的类进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2701861/