2016-06-09 90 views
18

這是我第一次在Android中編寫單元測試用例。使用JUnit +(Robolectric或Mockito或Android中的兩者)的單元測試用例

所以我搜索了很多東西。

  1. Robolectric framewordk - 運行在JVM
  2. 的Mockito Framwork - 嘲諷對象

所以我在Robolectric & Mokito有些疑惑。

  1. 我是否必須在Android應用程序中僅使用Robolectric和JUnit?
  2. 我是否必須僅在Android應用程序中使用Mockito和JUnit?
  3. 我是否應該同時使用這兩個框架?
  4. Mockito & Robolectric和有什麼不一樣?

我有搜索Mokito之間的區別& Robolectric但沒有得到任何正確的答案。

請建議。

回答

26

他們有不同的用法,我傾向於在我的項目中使用兩者。

的Mockito

用於製造類的嘲弄。

當你測試一個特定的類時,你可以用Mockito模擬它的所有依賴關係。

在可能的情況下,大多數測試應該使用mockito。爲了使這成爲可能,大多數人將他們的代碼分成MVP等,其中業務邏輯與View邏輯分開。這樣,您的業務邏輯(Presenter)對Android庫沒有任何知識(或依賴關係),並且無需嘲笑它們。

Robolectric

是包含的Android類的許多嘲弄庫。

Robolectric測試運行器在運行測試時將這些「陰影對象」替換爲實際的Android類。這就是允許在不啓動Android實例的情況下在JVM上運行測試的原因。

當使用MVP時,你的View層往往是由Activity/Fragment實現的,在這裏你可以使用Robolectric來模擬這些。

注意

使用Robolectric只有在必要的。它基本上重新實現了Android框架的一部分,但並不總是完全一樣。

您可能還需要另一個庫,如PowerMock。這允許模擬諸如Math等靜態類,或者可以用來模擬靜態Android類,如TextUtils。

兩者都與JUnit一起使用

+0

我有Activity&Fragment,因此我將使用robolectric&爲我的模型類與web服務相關,我將使用mockito。對? –

+0

那麼它可能不是那麼明確,但是這是一般的想法。 – Jahnold

+0

看看這個示例應用程序的測試可能會給你一些想法:https://github.com/emmaguy/rxjava-mvp-giphy – Jahnold

9

僅Mockito可以覆蓋大多數情況。

然而,Robolectric還可以提供在Android組件有限的操作,如在單元測試(未儀表測試,這對Android SDK中沒有依賴性),活動或片段,其不需要任何仿真器或裝置和相當比儀器測試更快。

我的建議:使用Mockito進行單元測試和Espresso進行UI測試,因爲它們是Android的半官方測試框架。

在您的單元測試中添加Robolectric是否存在Android SDK的一些依賴關係。

+0

我有活動&片段以及Web服務。我只能做單元測試而不是儀器。所以我明白robolectric,但我不知道我會在哪裏使用robolectric或mockito。 或mockito只能用於模型類嗎? –

+0

添加到您的評論中,如果您的業務邏輯層完全獨立於Android Framework,那麼只有在您的業務邏輯層具有Android Framework依賴關係時,才應該使用JUnit和Mockito,那麼您需要使用Roboelectric。 – Talha

相關問題