使 hibernate 指向与 DBUnit 相同的数据库连接
Make hibernate point to the same DB connection as 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&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&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 指向我的内存数据库?
提前致谢!
您可以执行如下操作:
1.Create 一个指向 In Memory DB 的数据源 bean,如下所示
<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>
2.Define 将引用此数据源的 EntityManagerFactory。
3.Add 这两个 bean 在 testConfig.xml
4.Run 与 JUnit
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations ={ "testconfig.xml" })
由于您没有使用 Spring,您可以尝试基于 Maven 的解决方案。这涉及在 src/test/resources/META-INF 下创建具有相关属性的单独 persistence.xml。
当 运行 你测试这个 persistence.xml 应该优先于 src/main/resources 中的那个。
我正在使用 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&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&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 指向我的内存数据库?
提前致谢!
您可以执行如下操作:
1.Create 一个指向 In Memory DB 的数据源 bean,如下所示
<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>
2.Define 将引用此数据源的 EntityManagerFactory。
3.Add 这两个 bean 在 testConfig.xml
4.Run 与 JUnit
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations ={ "testconfig.xml" })
由于您没有使用 Spring,您可以尝试基于 Maven 的解决方案。这涉及在 src/test/resources/META-INF 下创建具有相关属性的单独 persistence.xml。
当 运行 你测试这个 persistence.xml 应该优先于 src/main/resources 中的那个。