簡體   English   中英

帶有 JUnit + 的單元測試用例(Android 中的 Robolectric 或 Mockito 或兩者)

[英]Unit Test Cases with JUnit +(Robolectric or Mockito or both in Android)

這是我第一次必須在 Android 中編寫單元測試用例。

所以我搜索了很多東西。

  1. Robolectric framewordk - 在 JVM 上運行
  2. Mockito 框架-模擬對象

所以我對 Robolectric 和 Mokito 有一些懷疑。

  1. 我是否必須在 Android 應用程序中僅將 Robolectric 與 JUnit 一起使用?
  2. 我是否必須在 Android 應用程序中僅將 Mockito 與 JUnit 一起使用?
  3. 我應該同時使用這兩個框架嗎?
  4. Mockito 和 Robolectric 有什么區別?

我在尋找 Mokito 和 Robolectric 之間的區別,但沒有得到任何正確的答案。

請建議。

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

莫基托

用於模擬您的課程。

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

在可能的情況下,您的大部分測試都應該使用 mockito。 為了使這成為可能,大多數人將他們的代碼拆分為 MVP 等,其中業務邏輯與視圖邏輯分離。 這樣您的業務邏輯 (Presenter) 就沒有關於 Android 庫的知識(或依賴項),也不需要模擬它們。

機器人電子

是一個包含許多Android類模擬的庫。

在運行測試時,Robolectric 測試運行器會注入這些“影子對象”來代替實際的 Android 類。 這就是允許測試在 JVM 上運行而無需啟動 Android 實例的原因。

使用 MVP 時,您的 View 層往往由 Activity/Fragment 實現,這就是您可以使用 Robolectric 來模擬這些的地方。

筆記

僅在必要時使用 Robolectric。 它基本上重新實現了 Android 框架的一部分,但並不總是以完全相同的方式實現。

您可能還需要另一個庫,例如 PowerMock。 這允許模擬靜態類(如 Math)或可用於模擬靜態 Android 類(如 TextUtils)。

兩者都與 JUnit 一起使用

Mockito 本身就可以涵蓋大多數情況。

但是,Robolectric 也可以在單元測試(不是儀器測試,它不依賴於 Android SDK)上提供對 Android 組件的有限操作,例如 Activity 或 Fragment,它不需要任何模擬器或設備,並且比儀器測試要快得多。

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

如果對 Android SDK 有一些依賴,請在單元測試中添加 Robolectric。

首先我們需要了解Roboelectric和Mockito是android測試驅動開發中常用的兩種不同的工具。 所以大多數情況下,您會在同一個項目中找到這兩種工具。

下面我將解釋兩者的常見用例-

Mockito用於模擬依賴,這意味着如果你想在測試環境中訪問一個真實的對象,那么你需要偽造它,或者我們可以說模擬它。 現在,使用 Mockito 對對象進行模擬變得非常容易。

Roboelectric是 Android 的行業標准單元測試框架。 使用 Robolectric,您的測試可以在 JVM 內的模擬 Android 環境中運行,而沒有模擬器的開銷。 使用機器人編寫的簡單測試是

`@RunWith(AndroidJUnit4.class)
public class MyActivityTest {
@Test
public void clickingButton_shouldChangeResultsViewText() throws Exception {
Activity activity = Robolectric.setupActivity(MyActivity.class);

Button button = (Button) activity.findViewById(R.id.press_me_button);
TextView results = (TextView) activity.findViewById(R.id.results_text_view);

button.performClick();
assertThat(results.getText().toString(), equalTo("Testing Android Rocks!"));
}
}`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM