Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试使用Hibernate和Can'对进行DB查询的类进行单元测试;无法创建会话_Java_Hibernate_Orm_Junit_Jndi - Fatal编程技术网

Java 尝试使用Hibernate和Can'对进行DB查询的类进行单元测试;无法创建会话

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测试一起工作。我不断收到一个异常,声明“需要在环

我试图为使用Hibernate执行DB查询的类实现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
,并开始/提交/回滚单元测试中每个方法的事务