2016-05-17 65 views
0

我正在使用hiberante jpa連接到mysql數據庫。讓休眠指向與DBUnit相同的數據庫連接

我的持久性單元在我的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's使用此連接來執行所有與數據庫的操作。

我也在使用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指向我的內存數據庫?

提前致謝!

+0

我假設你沒有使用Spring?那麼Maven呢? –

+0

我不使用spring .. Maven我是 –

+0

嘗試在src/test/resources/META-INF下用相關值創建第二個persistence.xml。測試運行時,src/test下的資源應該優先。 –

回答

0

當你不使用Spring,你可以嘗試基於Maven的解決方案。這涉及在src/test/resources/META-INF下用相關屬性創建一個單獨的persistence.xml。

運行測試時,這個persistence.xml應該優先於src/main/resources中的那個。

0

你可以這樣做如下:

1.創建一個數據源豆指向在內存數據庫類似下面

<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.添加這兩種豆子在testConfig.xml

4.Run使用JUnit

@RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations ={ "testconfig.xml" }) 
+0

他在哪裏提到他在使用Spring? –

+0

是的,我錯過了,他沒有使用Spring。 – shankarsh15