2016-07-05 83 views
1

當測試一個DAO我遵循下列規則:測試數據訪問對象

  • 使用的內存數據庫
  • 每一個測試復位數據庫的數據

這非常適用於從選擇數據庫。我使用select所需的數據設置數據庫,調用我的DAO並驗證返回的對象是否具有正確的值。

但是,當測試插入,更新和刪除它變得醜陋。我必須編寫一個自定義選擇語句來驗證數據庫中是否插入/更新/刪除了正確的數據。所以當我完成寫測試時,我可以再次測試我的測試。

網絡上的一些人建議嘲笑字面上的一切,但這並不真正測試任何imo。

那麼,如何測試一個DAO?

回答

1

你不需要真的必須測試DAO,只要它們足夠苗條(應該是),並且不包含業務邏輯。在寫某些系統/集成測試時,您會在某個時候無意中測試它們。

根據你使用的是什麼(ORM框架?)你可能能夠存根/模擬東西,但它很少值得。

至於在NUnit中使用連接字符串(所以從你的測試項目中操作數據庫),我發現一般情況下沒有什麼問題,它比你想象的更普遍。

+0

謝謝你的回答,但我沒有完全得到最後一部分。 NUnit中的連接字符串是什麼?它與這個問題有什麼關係? –

+0

你說得對,我沒有那麼清楚,因爲我不知道你在測試什麼語言/框架(C#/ Java?)。你提到你正在重新設置每個測試(之前/之後?)的數據庫數據 - 你可能通過直接從你的測試項目連接到數據庫來做到這一點,這很好。 –

+0

我明白了。我其實沒有特定的語言/框架。我正在尋求一個通用的方法。 –

2

測試DAO包含3個不同的步驟。

1)測試POJO的(單元測試)

2)測試DAO的由(集成測試)

3)測試DAO用戶類。

1)測試POJO的:

這是一個非常簡單,沒有什麼做的DAO測試。主要是爲了增加項目的測試覆蓋率,並且通常測試一個普通對象的setter和getters。

2)測試DAO的:

這是一個集成測試,它不會增加單元測試覆蓋率。在這種情況下,必須創建並運行測試數據庫。在打開測試數據庫會話並添加所有daoMapper後。一旦這個設置完成,dao類的所有方法都會被調用並逐個測試。

3)測試DAO用戶類:

在單元測試實現嘲笑一個目的是一種非常有用的方法。當你測試一個類時,這個類使用其他服務,方法和類;您可以輕鬆地嘲笑這些服務,類和方法,因爲它們可能已經在其他地方進行了測試。通過嘲笑我們的意思是假定一個特定的方法返回一些特定的值或一個對象。

有很多嘲笑工具,如EasyMock,PowerMockito和PowerMock。在DAO嘲諷案例中(因爲我們已經測試過DAO,所以我們可以嘲笑它們),我們可以通過使用PowerMock來模擬。