2011-07-13 65 views
2

我對JUnitTestNG有一點經驗,今天我需要爲Java數據庫代碼做一些單元測試。使用JUnit進行數據庫單元測試

我真的不知道我怎麼能做到這一點。因爲我認爲測試數據庫比普通代碼更困難。

有什麼線索可以給我嗎?

謝謝。

EDIT 

你怎麼看待DbUnit

+0

您需要提供更多的細節。你想在數據庫中測試什麼?你的數據庫連接(或其他與db相關的參數)或數據訪問層。如果你想測試你的數據訪問層,是什麼樣的。(實體,ORM像休眠等) –

+0

我使用JDBC來操縱數據庫,沒有休眠沒有struts(沒有框架) –

回答

4

可以開始使用DbUnit

順便說一下,當您單元測試訪問數據庫的類時,您不測試數據庫。您應該在測試前後將數據庫置於已知狀態,並且您應該驗證您的課程是否已履行合同。

你下面是更具體的瞭解的DbUnit:

你認爲怎麼樣的DbUnit

的DbUnit已經有相當一段時間。就簡單的DAO(數據訪問對象)實現而言(假設您遵循DAO模式),DbUnit非常適合,因爲您可以在測試DAO之前設置數據庫的狀態,然後針對DAO類並驗證預期操作是否成功完成。像其他JUnit測試一樣,如果DAO的合同指定拋出異常,例如在未找到數據的情況下,您也可以期望DAO拋出異常。

請記住,對數據庫進行測試沒有什麼特別之處。你應該專注於測試你的類而不是測試數據庫。簡而言之,數據庫(和JDBC驅動程序)應該被視爲SUT(系統測試)的協作者,而不是SUT。這是你應該測試的DAO類和他們的合同。

4

數據庫測試的一種常見方法是在一個永遠不會提交的事務中運行每個測試。這通常適用於大多數集成測試(但不是全部)。這保證了測試不會使數據庫處於不確定狀態,並最大限度地減少由於數據庫狀態而導致的測試相關性。

在運行它們之前,您仍然需要生成測試夾具數據。在少數情況下,您必須提交您需要在測試清理中發出補償性事務。

例如,Spring通過TestContext transaction management支持開箱即用。你可以考慮在你的測試中使用Spring。使用JDBC,您可以輕鬆管理測試中的事務。