Как протестировать проект библиотеки Android - PullRequest
91 голосов
/ 30 августа 2010

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

Какой правильный путь для модульного тестирования Android Library Project?

Ответы [ 6 ]

70 голосов
/ 31 августа 2010

Цитирование Документация :

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

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

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

17 голосов
/ 15 декабря 2012

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

Затем запустите ваши тесты.

13 голосов
/ 19 января 2011

http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/ помогает описать процесс, необходимый для реализации второго предложения в ответе CommonsWare

3 голосов
/ 06 января 2017

Согласно документации :

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

1 голос
/ 16 мая 2013

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

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

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

  1. Создайте новый проект библиотеки Android, установив флажок «Есть библиотека» во время создания. (например, проект Android под названием «RemingtonAndroidTools»).
  2. Создайте проект библиотеки Android и убедитесь, что он создал файл jar в папке bin. (например, файл jar с именем «RemingtonAndroidTools.jar».)
  3. Создайте пустой Android-проект для тестирования приложения Android, которое будет использоваться в качестве приложения Android Test. (Например, проект Android с именем «RemingtonAndroidToolsTestApp»). Вам не нужно будет изменять исходный код или ресурсы проекта Android Test App, если у вас нет чего-то, что необходимо добавить для тестирования. Многие вещи можно протестировать без каких-либо изменений в Android Test App Project. Проект Android Test App - это мост между вашим проектом библиотеки Android и проектом Android Junit, который делает возможным тестирование проекта библиотеки Android через Android Junit.
  4. Перейдите на вкладку «Библиотека» пути сборки Java для проекта Android Test App (в данном примере «RemingtonAndroidToolsTestApp»).
  5. Добавьте файл jar (в данном примере «RemingtonAndroidTools.jar») проекта библиотеки Android (в этом примере «RemingtonAndroidTools») с помощью кнопки «Добавить Jars ...».
  6. Создайте новый проект Android Test (например, «RemingtonAndroidToolsTester»), который будет выполнять функцию тестера библиотеки Android, и выберите проект Android Test App (в данном примере «RemingtonAndroidToolsTestApp»).
  7. Перейдите на вкладку «Библиотека» пути сборки Java для проекта Android Library Tester (в данном примере «RemingtonAndroidToolsTester»).
  8. Добавьте файл jar (в данном примере «RemingtonAndroidTools.jar») проекта библиотеки Android (в этом примере «RemingtonAndroidTools») с помощью кнопки «Добавить банки ...».
  9. Найдите последнюю папку вашего пакета Android в проекте Android Library Tester (например, "danny.remington.remington_android_tools_test_app.test") и добавьте тестовый класс (например, "MainActivityTest"), который наследуется от ActivityInstrumentationTestCase2.
  10. Измените класс теста (в данном примере «TestActivityTest»), чтобы использовать действие (например, «TestActivity») приложения Android Test (в данном примере «RemingtonAndroidToolsTestApp») в качестве параметра для ActivityInstrumentationTestCase2.
  11. Отредактируйте тестовый класс (в данном примере «TestActivityTest») и создайте конструктор по умолчанию, который выполняет вызов super (Class) и передает класс Android Test App (например, «TestActivity.class»).

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

0 голосов
/ 31 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...