我想我們應該明確單元測試的定義。單元測試只能在應用程序中測試一個小單元(一種公共方法)。
假設您有一個使用Hibernate與數據庫進行交互的DAO層。現在Hibernate使用需要數據源的SessionFactory。單元測試的數據源不應該與您的生產應用程序的數據源相同。
這個想法是定義一個測試數據源,並使用內存數據庫(hsqldb或任何其他)。對於每個測試用例,您都可以使用測試數據源對內存數據庫執行一些查詢,並在執行單元測試後清除它。對於每個單元測試,您應該執行查詢,以便爲特定測試完成測試數據設置。
對於例如:如果你想測試如下: 1)創建帳戶 2)更新帳戶 3)刪除帳戶
然後有三個測試場景,並可以有蜂多個單元測試可以爲每個的情況。
現在在執行創建帳戶測試之前,重要的是數據庫沒有此帳戶。然後調用DAO中的createAccount方法來測試它。無需驗證結果是否在數據庫中。只需檢查您的方法的返回,並且如果它與創建成功的帳戶時的預期相同,那麼您的測試用例應該通過。
對於更新帳戶,您的設置方法應該通過查詢插入一個帳戶,然後您必須在此帳戶ID中調用DAO中的updateAccount等。
請堅持單元測試的定義,不要一次性使用它來測試多個功能。
希望這會有所幫助。
首先感謝您的答案,我不確定我的問題的哪一部分給人的印象是我使用單元測試來獲得更多的功能,但我向你保證事實並非如此。我的意思是我已經有很多已經寫好的單元測試,我正試圖找到一種方法來修改它們,所以它們不會損害數據。 我也需要這樣的集成測試,對於某些測試,我更願意使用我現有的數據而不是使用空白內存數據庫並自行填充,這就是爲什麼我要求使用我的原始數據庫和恢復的方法它。 – Shperb