簡體   English   中英

如何測試 Android 庫項目

[英]How to test an Android Library Project

我正在編寫一個基於 Android Bitmap 類(稱為 AndroindLib)的 Android 庫項目,它只包含實用程序類(無活動)。 我嘗試使用 Android JUnit 對其進行測試,但它一直抱怨找不到 AnroidLib.apk

單元測試 Android 庫項目的正確方法是什么?

引用文檔

“在庫項目中設置代碼和資源測試有兩種推薦的方法:

  • 您可以設置一個測試項目來檢測依賴於庫項目的應用程序項目。 然后,您可以將測試添加到項目中以獲取特定於庫的功能。

  • 您可以設置依賴於庫的標准應用程序項目並將檢測放在該項目中。 這使您可以創建一個包含測試/儀器和要測試的代碼的自包含項目。”

在您的測試項目中,只需更改包名稱,使其與您的庫的包相同。 例如,您有一個庫,其包為"com.example.lib" 創建一個針對您的庫的測試項目。 在清單文件中,您將看到package="com.example.lib.test"targetPackage="com.example.lib" 只需將包從“com.example.lib.test”更改為“com.example.lib”( targetPackage原樣)。

此外,請確保該庫不是在 Java 構建路徑中引用到您的測試項目,而是作為通常的 Android 庫:在 Eclipse 中,它必須在Project->Properties->Android選項卡中顯示為庫,但不在Project->Properties->Java Build Path選項卡。

然后運行你的測試。

http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/幫助描述在CommonsWare的回答中實現第二個建議所需的過程

根據文檔

測試庫模塊與測試應用程序相同。 主要區別在於庫及其依賴項會自動包含為測試 APK 的依賴項。 這意味着測試 APK 不僅包括它自己的代碼,還包括庫的 AAR 及其所有依賴項。 由於沒有單獨的“被測應用”,androidTest 任務僅安裝(和卸載)測試 APK。 合並多個清單文件時,Gradle 遵循默認優先級順序,並將庫的清單合並到測試 APK 的主清單中。

注意:此解決方案基於使用 Eclipse Indigo (3.8.2),雖然基本原理是相同的,但對於另一個 IDE,可能需要稍微不同地實現。

我有類似的問題,我發現執行以下操作總是有效:

注意:這些說明用於從頭開始構建新的項目組。如果您已經構建了項目組的一部分,那么您可能需要修改您的項目,以便它們以相同的方式連接。

  1. 通過在創建過程中選中“Is Library”復選框來創建一個新的 Android Library 項目。 (例如名為“RemingtonAndroidTools”的 Android 項目)。
  2. 構建 Android 庫項目並驗證它是否在 bin 文件夾中創建了一個 jar 文件。 (例如名為“RemingtonAndroidTools.jar”的 jar 文件。)
  3. 創建一個空的 Android 項目,用於測試將用作 Android 測試應用程序的 Android 應用程序。 (例如名為“RemingtonAndroidToolsTestApp”的 Android 項目)。 您不需要修改 Android Test App 項目的源代碼或資源,除非您有一些必須添加以進行測試的內容。 無需對 Android 測試應用程序項目進行任何修改即可測試許多內容。 Android 測試應用程序項目是您的 Android 庫項目和 Android Junit 項目之間的橋梁,它使通過 Android Junit 測試 Android 庫項目成為可能。
  4. 轉到 Android Test App 項目的 Java Build Path 的 Library 選項卡(在本例中為“RemingtonAndroidToolsTestApp”)。
  5. 通過“添加罐子...”按鈕添加 Android 庫項目(本例中為“RemingtonAndroidTools”)的 jar 文件(本例中為“RemingtonAndroidTools.jar”)。
  6. 創建一個用作 Android 庫測試器的新 Android 測試項目(例如“RemingtonAndroidToolsTester”),並選擇 Android 測試應用項目(在本例中為“RemingtonAndroidToolsTestApp”)作為目標。
  7. 轉到 Android Library Tester 項目的 Java Build Path 的 Library 選項卡(本例中為“RemingtonAndroidToolsTester”)。
  8. 通過“添加罐子...”按鈕添加 Android 庫項目(本例中為“RemingtonAndroidTools”)的 jar 文件(本例中為“RemingtonAndroidTools.jar”)。
  9. 在 Android Library Tester 項目中找到 Android 包的最后一個文件夾(例如“danny.remington.remington_android_tools_test_app.test”)並添加一個從 ActivityInstrumentationTestCase2 繼承的測試類(例如“MainActivityTest”)。
  10. 編輯測試類(本例中為“TestActivityTest”)以使用 Android 測試應用(本例中為“RemingtonAndroidToolsTestApp”)的活動(例如“TestActivity”)作為 ActivityInstrumentationTestCase2 的參數。
  11. 編輯測試類(在本例中為“TestActivityTest”)並創建一個默認構造函數,該構造函數調用 super(Class) 並傳入 Android 測試應用程序的類(例如“TestActivity.class”)。

您應該最終得到三個與此類似的項目(Android 庫、Android 測試應用程序、Android 庫測試器):

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

你應該最終得到一個類來測試你的 Android 庫,它看起來類似於:

package danny.remington.remington_android_tools_test_app.test;

import android.test.ActivityInstrumentationTestCase2;
import danny.remington.remington_android_tools_test_app.TestActivity;

/**
 * 
 */
public class TestActivityTest extends
      ActivityInstrumentationTestCase2<TestActivity> {

   public TestActivityTest() {
      super(TestActivity.class);
   }

}

然后,您可以添加所需的任何測試。 您不需要進一步引用 Android 測試應用程序(在此示例中為“RemingtonAndroidToolsTestApp”)來運行您的測試,除非它們需要訪問 Android 特定組件(例如 Assets 文件夾)。 如果您需要訪問任何 Android 特定組件,您可以通過修改 Android 測試應用程序(在本例中為“RemingtonAndroidToolsTestApp”)然后通過標准 Android Junit API 提供的檢測引用它來實現。 (您可以在此處閱讀更多相關信息:http ://developer.android.com/tools/testing/testing_android.html

如果您的 ulitiy 類不依賴於任何 android 特定代碼,您可以只使用標准的 JUnit 單元測試。 無需使用 Android 版本。

暫無
暫無

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

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