Як перевірити проект бібліотеки Android


97

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

Який правильний спосіб випробувати модульний проект Android Library Library?


1
Або ( безсоромне попередження про підключення ) ви можете використати створений мною проект: Тестовий ремінь Android Library (те, що мені подобається називати "Alt H"). Він доступний як git repo: gitorious.org/alth Проект ще розробляється, а документація трохи розрізнена, тому сміливо звертайтесь до мене, якщо у вас виникнуть запитання.
i41,

Відповіді:


75

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

"Є два рекомендовані способи налаштування тестування коду та ресурсів у бібліотечному проекті:

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

  • Ви можете встановити стандартний прикладний проект, який залежить від бібліотеки, і помістити інструменти в цей проект. Це дозволяє створити автономний проект, який містить як тести / інструменти, так і код для тестування. "


27
тому в основному все, що вам потрібно зробити, - це додати бібліотеку до свого тестового проекту та протестувати тестовий проект.
njzk2

Посилання вже не дійсне, будь-який шанс, який ви можете вказати на поточний?
Абдулла Джибалі


4
Не впевнений, чи досяг хтось успіх у цих рекомендаціях, але я цього не зробив. Спочатку спробував друге рішення, і коли я намагаюся запустити Eclipse, я отримую наступне: <ProjectName> не вказує інструмент android.test.InstrumentationTestRunner або не оголошує використання-бібліотека android.test.runner у своєму AndroidManifest.xml. Це незважаючи на той факт, що я додав як інструментарій, так і елементи бібліотеки використання до свого Маніфесту.
Беллінгеммер

2
Отримав другий (і кращий спосіб роботи). Дуже важливо, щоб ви знаходили бібліотеку використання та елементи приладів у правильному місці у вашому маніфесті. Елемент інструментарію - це дочірній елемент кореневого маніфесту, а елемент бібліотеки використання - це дочірній елемент додатка. Я ставив бібліотеку використання під елемент маніфесту і закінчував повідомленням про помилку вище, коли намагався запустити тести.
Беллінгеммер

17

У своєму тестовому проекті просто змініть ім'я пакета так, щоб воно було таким же, як у вашій бібліотеці. Наприклад, у вас є бібліотека, пакет якої є "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вкладці.

Потім запустіть тести.


Ваші ідеї мали сенс для мене, так що тест націляв на себе (як додаток), і додаток пов’язаний з бібліотекою .... але я не зміг змусити його працювати за допомогою складання мурашок чи IntelliJ .... як .apk (очікується, що тестується додаток) не існувало, коли він намагався його встановити, оскільки він збирається до "test / bin /.- debug.apk"
Andrew Mackenzie

Я змусив його працювати, просто змінивши назву пакета тестового проекту в його маніфесті (і тестовий пакет - який повинен бути однаковий), щоб НЕ збігався з назвою пакета проекту бібліотеки, а також видалив посилання на цільовий тест проект у файлі ant.properties.
Ендрю Макензі

1
Я думаю, що це краща відповідь, ніж прийнята, що просто перегукується з документацією - ІМХО.
Ендрю Макензі


5

Відповідно до документації :

Тестування модуля бібліотеки те саме, що тестування програми. Основна відмінність полягає в тому, що бібліотека та її залежності автоматично включаються як залежності тестового APK. Це означає, що тестовий APK включає не тільки власний код, а й AAR бібліотеки та всі її залежності. Оскільки не існує окремого "тестового додатка", завдання androidTest встановлює (і видаляє) лише тестовий APK. Під час об'єднання декількох файлів маніфестів Gradle дотримується порядку пріоритетності за замовчуванням і об'єднує маніфест бібліотеки в основний маніфест тестової APK.


яке завдання для запуску тестів? тест Gradle, або gradle androidTest? androidTest - це не завдання.
Сонячний день

але такі інструменти, як Firebase Test Lab вимагають APK або AAB, і не приймають файл AAR, який є результатом завдання зібрати бібліотеку
Mustafa Berkay Mutlu

1

ПРИМІТКА. Це рішення засноване на використанні Eclipse Indigo (3.8.2) і може бути реалізовано дещо інакше для іншого IDE, хоча основні принципи будуть однаковими.

У мене були подібні проблеми, і я виявив, що робити наступне:

( ПРИМІТКА. Ці інструкції призначені для створення нової групи проектів з нуля. Якщо ви вже створили частини групи проектів, можливо, вам доведеться змінити свої проекти, щоб вони з'єднувались однаково. )

  1. Створіть новий проект бібліотеки Android, встановивши прапорець "Є бібліотека" під час створення. (наприклад, проект Android під назвою "RemingtonAndroidTools").
  2. Створіть проект бібліотеки Android і переконайтеся, що він створив файл jar в папці bin. (наприклад, файл jar з назвою "RemingtonAndroidTools.jar".)
  3. Створіть порожній проект Android для тестування програми Android, яка буде виконувати функції тестового додатка Android. (Наприклад, проект Android під назвою "RemingtonAndroidToolsTestApp"). Вам не потрібно буде змінювати вихідний код або ресурси проекту Android Test App, якщо у вас є щось, що потрібно додати для тестування. Багато речей можна перевірити без будь-яких модифікацій проекту Android Test App. Проект Android Test App - це міст між вашим проектом бібліотеки Android та проектом Android Junit, який робить можливим тестування проекту бібліотеки Android через Android Junit.
  4. Перейдіть на вкладку Бібліотека Java Build Path для проекту Android Test App ("RemingtonAndroidToolsTestApp" у цьому прикладі).
  5. Додайте файл jar ("RemingtonAndroidTools.jar" у цьому прикладі) проекту Android Library ("RemingtonAndroidTools" у цьому прикладі) за допомогою кнопки "Add Jars ...".
  6. Створіть новий тестовий проект Android (наприклад, "RemingtonAndroidToolsTester"), який буде виконувати функцію тестера бібліотеки Android, і виберіть проект цілі Android (у цьому прикладі "RemingtonAndroidToolsTestApp").
  7. Перейдіть на вкладку Бібліотека Java Build Path для проекту Тестер бібліотеки Android ("RemingtonAndroidToolsTester" у цьому прикладі).
  8. Додайте файл jar ("RemingtonAndroidTools.jar" у цьому прикладі) проекту Android Library ("RemingtonAndroidTools" у цьому прикладі) за допомогою кнопки "Add Jars ...".
  9. Знайдіть останню папку вашого пакета Android у проекті Тестер бібліотеки Android ("danny.remington.remington_android_tools_test_app.test" наприклад) та додайте тестовий клас (наприклад "MainActivityTest"), який успадковується від ActivityInstrumentationTestCase2.
  10. Відредагуйте тестовий клас ("TestActivityTest" у цьому прикладі), щоб використовувати активність (наприклад, "TestActivity") програми Android Test ("RemingtonAndroidToolsTestApp" у цьому прикладі) як параметр для 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" у цьому прикладі), а потім посилаючись на нього за допомогою інструментарію, що надається стандартним API Junit API. (Ви можете прочитати більше про це тут: http://developer.android.com/tools/testing/testing_android.html )


0

Якщо ваші класи ulitiy не залежать від якогось конкретного коду для Android, ви можете просто використовувати стандартні модульні тести JUnit. Не потрібно використовувати версії Android.


2
Це не працює, оскільки стандартний JUnit компілюється у стандартний JVM, тоді як файли Java для Android збираються у програму Dalvik VM.
Денні Ремінгтон - OMS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.