2015-03-03 18 views
-1

我對testng(單元測試)和mockito非常新穎。我已經閱讀了一些文章,並通過互聯網上的一些代碼片段。但我仍然懷疑有關單元測試testng & mockitospring framework有關testng和mockito的最佳用法的問題

  1. 對於測試服務層的單元,我們模擬一個DAO。如果我想測試一個從數據庫獲取數據並執行一些操作的函數,該怎麼辦?模擬DAO如何在這裏工作。從哪裏嘲笑DAO將獲得一些數據來測試這樣的功能。
  2. 如果我在數據庫中進行數據驗證,但我想測試它是否會引發正確的異常。所以它需要數據庫中的一些值,模擬DAO將檢查數據是否存在於預定義的數據庫(內存中)中。如何提供這樣的數據。
  3. dataprovider是否有助於提供數據供DAO使用。如果是的話,它是如何做到的?

如果我對單元測試的理解是正確的,請糾正我。如果我錯過了解某個概念,請讓我知道我錯了什麼。 謝謝。

回答

0

1)除了UnitTests,您還需要集成和/或驗收測試。 單元測試將測試您的SUT - 測試的單個單元,在這種情況下,特定的服務類按預期工作,而不與其他類或系統(DB)集成。但是,另外我會爲此服務編寫一個集成測試,用於從數據庫中檢索/處理測試數據。理想情況下,此測試不應對數據庫中的數據作出任何假設,因此建議在執行測試之前插入您要查找的數據。使用@Before註釋並實際將此測試數據提交到測試數據庫中。但是,我還建議您在@After測試方法中對數據庫進行適當的清理。自動回滾數據可以完成,但並不是最佳的,特別是如果您有像Hibernate或JPA之類的持久性框架。只有當您處理真正在物理(而不是虛擬!)數據庫中提交的數據時,才能100%確定您的測試成功。

  • 如果我理解正確的打算,其實這聽起來像是一個完美的理由嘲笑你的DB /持久性對象 - 使其拋出預期的異常/返回一個空的結果,該測試您的代碼在此情況下的行爲如預期。

  • 一個TestNG的數據提供程序實際上做的您正在尋找的正好相反 - 它是一種提供一組數據來測試方法: org.testng.annotations.DataProvider 註釋類型的DataProvider 標記的方法作爲一個測試提供數據方法。數據提供者名稱默認爲方法名稱。帶註釋的方法必須返回一個Object [] [],其中每個Object []可以被分配測試方法的參數列表。希望從此DataProvider接收數據的@ Test方法需要使用一個dataProvider名稱,該名稱等於此註釋的名稱。