Как протестировать проект библиотеки Android

Я пишу проект библиотеки Android на основе Android Bitmap class (назовите его AndroindLib), который содержит только класс утилиты (без активности). Я пытался проверить его с помощью Android JUnit, но он продолжает жаловаться, что не может найти AnroidLib.apk

Каков правильный путь к Unit test проекту библиотеки Android?

Ответ 1

Цитата документация:

"Существует два рекомендуемых способа настройки тестирования кода и ресурсов в проекте библиотеки:

  • Вы можете настроить тестовый проект, который отображает проект приложения, который зависит от проекта библиотеки. Затем вы можете добавить тесты в проект для конкретных библиотек.

  • Вы можете настроить стандартный проект приложения, который зависит от библиотеки и поместить контрольно-измерительные приборы в этот проект. Это позволяет создать автономный проект, содержащий как тесты/приборы, так и код для тестирования.

Ответ 2

В тестовом проекте просто измените имя пакета так, чтобы он был таким же, как ваш пакет библиотеки. Например, у вас есть библиотека с пакетом "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.

Затем выполните тесты.

Ответ 4

В документация:

Тестирование библиотечного модуля аналогично тестированию приложения. Основное различие заключается в том, что библиотека и ее зависимости автоматически включаются в зависимости от теста APK. Это означает, что тестовый APK включает не только собственный код, но также библиотеку AAR и все ее зависимости. Поскольку нет отдельного "тестируемого приложения", задача androidTest устанавливает (и удаляет) только тестовый APK. При объединении нескольких файлов манифеста Gradle следует порядку приоритета по умолчанию и объединяет манифест библиотеки в основной манифест теста APK.

Ответ 5

Если ваши классы ulitiy не зависят от какого-либо специфического кода Android, вы можете просто использовать стандартные тестовые модули JUnit. Не нужно использовать версии Android.

Ответ 6

ПРИМЕЧАНИЕ.. Это решение основано на использовании Eclipse Indigo (3.8.2) и, возможно, должно быть реализовано несколько иначе для другой среды IDE, хотя основные принципы будут одинаковыми.

У меня были похожие проблемы, и я обнаружил, что всегда выполняются следующие действия:

(ПРИМЕЧАНИЕ. Эти инструкции предназначены для создания новой группы проектов с нуля. Если вы уже создали части группы проектов, вам может потребоваться изменить ваши проекты, чтобы они соединялись одинаково.)

  • Создайте новый проект библиотеки Android, установив флажок "Является ли библиотека" во время создания. (например, проект Android под названием "RemingtonAndroidTools" ).
  • Создайте проект библиотеки Android и убедитесь, что он создал файл jar в папке bin. (например, файл jar с именем "RemingtonAndroidTools.jar" .)
  • Создайте пустой Android-проект для тестирования приложения Android, которое будет служить в качестве приложения для тестирования Android. (Например, проект Android под названием "RemingtonAndroidToolsTestApp" ). Вам не нужно будет изменять исходный код или ресурсы проекта Android Test App, если у вас нет чего-то, что нужно добавить для тестирования. Многие вещи могут быть протестированы без каких-либо изменений в Android Test App Project. Проект Android Test App - это мост между вашим проектом Android Library и проектом Android Junit, который позволяет тестировать проект Android Library через Android Junit.
  • Перейдите на вкладку "Библиотека" пути Java Build Path для проекта Android Test App ( "RemingtonAndroidToolsTestApp" в этом примере).
  • Добавьте в этот пример файл jar ( "RemingtonAndroidTools.jar" ) проекта библиотеки Android ( "RemingtonAndroidTools" в этом примере) с помощью кнопки "Добавить банки...".
  • Создайте новый проект тестирования Android (например, "RemingtonAndroidToolsTester" ), который будет служить в качестве тестера Android-библиотек и выберите в этом примере проект приложения Android Test ( "RemingtonAndroidToolsTestApp" ).
  • Перейдите на вкладку "Библиотека" пути Java Build Path для проекта Android Library Tester ( "RemingtonAndroidToolsTester" в этом примере).
  • Добавьте в этот пример файл jar ( "RemingtonAndroidTools.jar" ) проекта библиотеки Android ( "RemingtonAndroidTools" в этом примере) с помощью кнопки "Добавить банки...".
  • Найдите последнюю папку вашего пакета Android в проекте Android Library Tester (например, "danny.remington.remington_android_tools_test_app.test" ) и добавьте тестовый класс (например, "MainActivityTest" ), который наследуется от ActivityInstrumentationTestCase2.
  • Отредактируйте тестовый класс ( "TestActivityTest" в этом примере) для использования активности (например, "TestActivity" ) приложения тестирования Android ( "RemingtonAndroidToolsTestApp" в этом примере) в качестве параметра ActivityInstrumentationTestCase2.
  • Отредактируйте тестовый класс ( "TestActivityTest" в этом примере) и создайте конструктор по умолчанию, который делает вызов супер (класс) и передает в класс тестовое приложение Android (например, TestActivity.class).

В итоге вы получите три проекта (Android-библиотека, Android Test App, Android Library Tester), которые выглядят примерно так:

enter image description here

enter image description here

enter image description here

Вы должны получить класс для тестирования вашей библиотеки 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 (например, папке "Активы" ). Если вам нужно получить доступ к любым конкретным компонентам Android, вы можете сделать это, изменив приложение Android Test ( "RemingtonAndroidToolsTestApp" в этом примере), а затем ссылаясь на него с помощью инструментария, предоставленного стандартным Android Junit API. (Вы можете узнать больше об этом здесь: http://developer.android.com/tools/testing/testing_android.html)