2012-04-06 56 views
4

我認爲它通常用於包含CRUD操作的數據庫測試。所以這些函數修改數據庫,使預期的值發生變化:例如。如果我測試一個SELECT返回2行,如果刪除測試運行1st,我可能會失敗。與INSERT類似。 JUnit看起來並沒有像定義的那樣運行測試,所以預期的值很難。JUnit數據庫測試和測試排序

如果我在每次測試中都重新初始化我的數據庫,它可能會過度並且很慢。那麼我該如何解決這個問題呢?

回答

3

是的,正如Steve Hall指出的那樣,使用事務測試解決了測試和測試運行之間數據庫一致性問題的100%。 Spring爲這種類型的測試提供了非常精心的支持(請參閱transaction management in TestContext Framework),但如果沒有它,實現起來並不難。

在最終回滾事務的交易測試中,只要它們是測試啓動的事務的一部分,您就可以自由地將任何CRUD操作應用於您的數據。然後在測試拆除過程中單次回滾消除了數據庫上的所有CRUD影響。

0

你的單元測試不應該是順序依賴的,但對於單元級別的測試,你通常不應該使用真正的數據庫。你應該使用類似DBUnit的模擬數據庫,或者如果你的數據庫隱藏在服務層接口後面,爲此創建一個模擬。

+0

我同意@Jeff,除非您測試與數據庫的集成,否則您應該使用類似Mockito的模擬您的數據訪問對象。 – MarkOfHall 2012-04-06 03:25:19

1

你可能想看看像DBUnit。如果這不符合您的需求,那麼您可以嘗試在數據庫事務中包裝測試。您可以使用setupteardown方法來啓動和回滾事務。