Как протестировать проект библиотеки 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
.
Затем выполните тесты.
Ответ 3
http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/ помогает описать процесс, необходимый для реализации второго предложения в ответе CommonsWare
Ответ 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)