2010-03-30 88 views
2

我寫了一個方法,該方法在給定正確的字符串鍵的情況下檢索某些字符串列表。現在,當我創建一個列表(通過上一句描述的方法檢索的列表)並創建測試時,我可以輕鬆獲得結果併成功通過測試。Jmock模擬DAO對象

現在,另一方面,如果我將這個列表的內容保存到數據庫的2列中,keyvalue我寫了一個類,它用裏面的方法檢索這個項目。當我打印輸出到控制檯時,預期的結果是正確的,現在我從應用程序上下文中初始化我的DAO,它在bean的內部會話和DAO工作。

現在我想寫一個測試,將嘲笑DAO,因爲我的服務器上運行測試localy不..所以我告訴JMock的嘲笑它:在設置

private MyDAO myDAO; 

()

myDAO = context.mock(MyDAO.class); 

我想我是否正確地嘲笑它,我怎麼能從數據庫中嘲笑這個數據?什麼是最好的方法?

有沒有好的Jmock文檔?在他們的官方網站上,它不是很好,很清楚,你必須知道你在尋找什麼才能找到它,同時也不會發現很酷的東西。

或有人可以幫我這個方法:

我怎麼可以創建一個我會用只是爲了測試,以instansiate DAO和一些豆類那裏,像在服務器上的應用程序上下文。所以我可以在測試中使用它?另外建議,解釋一切都是受歡迎的。謝謝

+0

http://techblog.bozho.net/?p=118 – Bozho 2010-03-30 14:53:20

+0

你還沒有告訴我們問題是什麼......'mock(MyDAO.class)'不工作? – skaffman 2010-03-30 14:56:12

+0

@skaffman nop mock沒有工作..我模仿確實創建了虛假的dao對象,但我沒有從它的方法得到任何結果,它應該檢索字符串給定的字符串鍵 – 2010-03-30 14:58:24

回答

2

Thisthis帖子描述如何以及爲什麼測試DAO。 (如果你不使用它們,你可以輕鬆地隔離spring和maven) - 點使用的是HSQLDB)

+0

使用mock,缺點是你必須實現潛在的複雜DAO/JPA /數據庫行爲(例如,一個商店導致私有@Id字段變成組)。但是,通過模擬,您可以生成可能難以用分階段數據創建的錯誤響應。另外,使用模擬框架,您可以將測試數據保存在本地測試本身,而不是單獨的文件中。它是否正確?你如何權衡這種權衡? – 2010-05-11 03:58:08

+0

我認爲嘲笑dao很少有理由 - 你需要有一個非常複雜的模擬。 – Bozho 2010-05-11 04:53:00

+0

如果最終出現複雜模擬,則會出現不同的設計問題。它表明你的一些接口太大了。 – 2011-12-08 11:07:20

0

MyDAO是一個接口,你只能做一個接口的模擬。

+0

實際上,你可以模擬課程,但除了緊急情況之外,我們不推薦它。 – 2011-12-08 11:08:03