使hibernate指向与DBUnit

时间:2016-05-17 14:06:59

标签: mysql hibernate hsqldb dbunit

我正在使用hiberante jpa连接到mysql数据库。

我的persistence.xml中的持久性单元如下所示:

<persistence-unit name="inventoryManager">          

        <!--some settings-->

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/inventory?useSSL=false&amp;useUnicode=true&amp;useJDBCCompliantTimezoneS‌​hift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="1234"/>

            <!--Hibernate properties-->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="false"/>
            <property name="hibernate.hbm2ddl.auto" value="validate"/>
        </properties>
    </persistence-unit>

我的DAO正在使用此连接来执行数据库的所有操作。

我也在使用DBUnit进行测试,但我使用的是内存数据库(hsql)。它在我的测试用例构造函数中的配置如下所示:

       System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "org.hsqldb.jdbcDriver" );
       System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:hsqldb:mem:db" );
       System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "sa" );
       System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "" );
       System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "db" ); 

所以当我运行一个调用一个DAO的测试时。 DAO实例化一个entityManager,它指向persistence.xml

中指定的mysql连接

问题是:如何让我的DAO中的entityManager指向我的内存数据库?

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

1.创建一个指向In Memory DB的数据源bean,如下所示

<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script> <div id="map_canvas"></div>

2.定义一个EntityManagerFactory,它将引用此DataSource。

3.在testConfig.xml中添加这两个bean

4.使用JUnit运行

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="org.hsqldb.jdbc.JDBCDriver" />
        <property name="jdbcUrl"
                value="jdbc:hsqldb:file:/data/data.db" />
</bean>

答案 1 :(得分:0)

由于您没有使用Spring,您可以尝试基于Maven的解决方案。这涉及在src / test / resources / META-INF下使用相关属性创建单独的persistence.xml。

运行测试时,此persistence.xml应优先于src / main / resources中的那个。