2011-11-21 85 views
2

我想單元測試我的代碼,而不依賴後端服務在我的谷歌應用程序引擎上運行並運行。什麼是最好的方式來實現這一點,而不必創建我自己的實現像請求工廠等每個類。刪除單元測試的依賴關係

這是我的代碼。我在運行單元測試時已經攻擊了Util類以返回模擬MyRequestFactory實例。這個模擬工廠然後返回MyRequest的模擬實現。
這反過來具有創建,更新刪除等方法的模擬實現。 問題是我有更多的實體,我需要做到這一點,並將結束與大量的模擬類。

有沒有更簡單的方法?你認爲哪種模擬框架最適合?

MyRequestFactory requestFactory = Util.getRequestFactory(mContext, 
                 MyRequestFactory.class); 

final MyRequest request = requestFactory.myRequest();  

BookProxy bookProxy = request.create(BookProxy.class); 
bookProxy.setDescription(bookDescription.getText().toString()); 
bookProxy.setName(bookName.getText().toString()); 

Log.i(TAG, "Adding book" + bookProxy.toString()); 

Request<bookProxy> sendRequest = request.updateBook(bookProxy); 

sendRequest.fire(); 

bookName.setText(""); 
bookDescription.setText(""); 
+0

到目前爲止你寫了什麼樣的測試? – mikej

+0

我使用Robolectric對我的Activity執行了一些非常基本的測試。例如測試,當我點擊「添加書籍」按鈕時,一本新書被髮送到服務器並添加到數據庫中。爲了讓我測試這個,我嘲笑了bookProxy類,它實現了一個只保留本地地圖的實現,並從這個內部地圖添加刪除等,而不是調用App引擎服務。問題是創建模擬所涉及的工作遠遠多於其他所有工作。 – MayoMan

回答

2

我更喜歡Mockito嘲笑,因爲它允許間諜和執行後期望/驗證。

此外,Powermock允許諸如嘲笑靜態方法和調用構造函數。

+0

感謝您的提示。我已經下載了Mockito,看起來它會爲我節省很多麻煩。我正在使用Robolectric進行單元測試,並且發現它隨Mockito預先裝入。任何人使用Robolectric進行測試? – MayoMan

2

EasyMock易於使用。但是如果你發現自己爲單元測試實施了太多的模擬類,那麼這可能表明你的設計存在問題。

2

我和JMockit有過很多運氣。我以前試過JMock,當它工作時,它有點笨重。帶有PowerMock擴展的Mockito/EasyMock都易於使用,但它們干擾了我們的代碼覆蓋工具。

相關問題