我的單元測試使用Hibernate連接到內存中的HSQLDB數據庫。我希望有一種方法可以在JUnit的TestCase.setUp()
方法中清除並重新創建數據庫(包括模式和所有數據的整個數據庫)。清理整個數據庫(用Hibernate進行單元測試)
回答
你可以配置你的hibernate配置文件來強制數據庫每次都重新創建你的表和模式。
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create-drop</property>
hibernate.hbm2ddl.auto創建SessionFactory時自動驗證或導出模式DDL到數據庫。使用create-drop,當SessionFactory顯式關閉時,數據庫模式將被刪除。
例如驗證|更新|創建|創建 - 刪除
如果您不想在實際的hibernate配置中使用此配置,則可以爲單元測試目的創建一個hibernate配置。
這隻會在每次運行時重新創建它。這意味着如果你從eclipse運行你的測試,許多人會失敗,如果單獨運行會通過。至少這是我的經驗。 – 2013-05-14 23:20:08
hibernate.hbm2ddl.auto=create-drop
並引導一個新的SessionFactory
。
僅在使用JPA時如何完成此操作? – Konsumierer 2011-08-19 12:35:55
如果您使用的是Spring,那麼您可以在您的單元測試中使用@Transactional屬性,並且默認情況下在每個單元測試結束時,所有持久數據都將自動回滾,因此您不必擔心會丟失表格每次。
我HAA走到這裏通過量http://automateddeveloper.blogspot.com/2011/05/hibernate-spring-testing-dao-layer-with.html
從測試的角度來看一個例子,最好的做法是每一個測試之後清除數據。如果您使用創建 - 刪除,它也將刪除表架構。這會導致每次重新創建模式的開銷。
由於您使用的是提供直接截斷機制的hsql,在這種情況下它將是最好的選擇。
@After
public void clearDataFromDatabase() {
//Start transaction, based on your transaction manager
dao.executeNativeQuery("TRUNCATE SCHEMA PUBLIC AND COMMIT");
//Commit transaction
}
小心擦拭世界,重新開始新的每次。很快,您可能希望從系統中加載的一組「默認」測試數據開始。因此,你真正想要的是在每次測試運行之前恢復到基本狀態。在這種情況下,您需要一個交易,在每次測試運行前回滾。
要做到這一點,你應該註釋你的JUnit類:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/path/to/spring-config.xml"})
@TransactionConfiguration(transactionManager="myTransactionManager", defaultRollback=true)
public class MyUnitTestClass {
...
}
然後標註您的每一個測試方法與@Transactional:
@Transactional
@Test
public void myTest() {
...
}
- 1. 使用整個數據表進行單元測試
- 2. 使用Arquillian進行Java集成測試,數據庫清理
- 3. 僅使用H2數據庫進行單元測試
- 4. 使用ContentProvider和數據庫進行Android單元測試
- 5. 使用Symfony 2和數據庫進行單元測試
- 6. 使用JUnit進行數據庫單元測試
- 7. 使用EF6進行單元測試後重建數據庫
- 8. 單元測試數據庫
- 9. 「單元」測試數據庫
- 10. 單元測試數據庫
- 11. 如何正確進行單元測試清理套接字
- 12. JUnit測試後清理數據庫。
- 13. 在Node.js測試後清理數據庫
- 14. Selenium測試後的數據庫清理
- 15. SubSonic3在單元測試中清除測試數據/數據庫TearDown操作
- 16. django單元測試多個數據庫
- 17. 應該指涉從數據庫進行單元測試的完整性?
- 18. 如何進行單元測試而不碰到數據庫
- 19. 如何對數據庫遷移進行單元測試?
- 20. 如何對數據庫訪問邏輯進行單元測試?
- 21. 在添加休眠數據庫後進行單元測試
- 22. 如何對我的數據庫內容進行單元測試?
- 23. 單元測試 - 數據庫數據
- 24. 用Moq和一個通用倉庫進行單元測試
- 25. CI +測試:針對數據庫運行單元測試
- 26. 單元測試Spring @Repository&Hibernate
- 27. 單元測試與EF使用單獨的數據庫爲每個測試
- 28. 單元測試:當在Eclipse中運行下面的測試使用Hibernate和H2數據庫
- 29. 無法進行單元測試:$ _SESSION在每次測試運行前清空
- 30. 使用單元測試和測試數據庫
如果您正在測試您的數據庫,然後國際海事組織不是單元測試。 – Jamie 2010-09-05 16:07:05
我正在測試我的程序碰巧使用數據庫。 – 2010-09-05 16:14:28
我正在測試一個用於訪問數據庫中的數據的類 – Lu55 2015-06-17 22:17:32