簡體   English   中英

使用Hibernate添加數據庫后進行單元測試

[英]Unit testing after adding database with Hibernate

到目前為止,我已經將使用休眠的數據庫功能添加到了內存中的系統中。 當所有數據都存儲完后,我可以使用JUnit在每次測試后恢復原始數據。

有沒有辦法通過新的休眠添加來達到相同的結果? “相同的結果”是指從數據庫的原始狀態開始,進行可以更改數據庫的測試,然后將數據庫恢復為原始狀態。

到目前為止,我的想法是:

  1. 在內存數據庫中(這是Hibernate功能),但不允許我使用實際數據。
  2. 如果向我添加“測試標記”,DOA不會提交更改。

我敢肯定有更好的解決方案,但是我還沒有發現更好的解決方案。

您可以在每次測試之前啟動數據庫事務:

@PersistenceContext
private EntityManager em; 

@Before
public void init() {
    em.getTransaction().begin();
}

@After
public void destroy() {
    em.getTransaction().rollback();
}

這樣,每個測試在測試開始之前都會運行一個事務,並且在測試完成后會回滾此事務,因此您始終會丟棄當前正在進行的測試的所有更改。

我認為我們應該清楚單元測試的定義。 單元測試只能在應用程序中測試一個小的單元(公共方法)。

假設您有一個使用Hibernate與數據庫進行交互的DAO層。 現在,Hibernate使用需要數據源的SessionFactory。 單元測試的數據源不應與生產應用程序的數據源相同。

這個想法是定義一個測試數據源並使用內存中的數據庫(hsqldb或任何其他數據庫)。 對於每個測試用例,您都可以使用測試數據源在內存DB中執行一些查詢,並在執行單元測試后清除該查詢。 對於每個單元測試,您應該執行查詢,以便為該特定測試完成測試數據設置。

例如:如果要測試以下內容:1)創建帳戶2)更新帳戶3)刪除帳戶

然后有三個測試方案,每個方案可能有多個單元測試。

現在,在執行創建帳戶測試之前,重要的是數據庫沒有該帳戶。 然后在DAO中調用createAccount方法進行測試。 無需驗證結果是否在數據庫中。 只需檢查您的方法的返回值,如果它與成功創建帳戶時所期望的返回值相同,則您的測試用例應該可以通過。

對於更新帳戶,您的設置方法應通過查詢插入一個帳戶,然后必須在DAO中為此帳戶ID調用updateAccount,依此類推。

請遵守單元測試的定義,不要一次將其用於測試多個功能。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM