Автономный тестовый проект для проекта библиотеки на Android - программирование
Подтвердить что ты не робот

Автономный тестовый проект для проекта библиотеки на Android

Мой вопрос: Как создать автономный тестовый проект Android для библиотеки Android?

У меня есть моя Android-библиотека (которая отмечена как "Библиотека" в настройках проекта) и проект Android, содержащий мои тестовые классы JUnit. Проект тестирования правильно ссылается на библиотеку Android (в настройках проекта под "Android" ).

Исходный код моей библиотеки находится в пакете com.mayastudios. Все мои тестовые примеры также находятся в одном пакете (но в другом проекте). Так что в основном у меня есть что-то вроде этого:

+- MyLibraryProject
   +- src
      +- com/mayastudios/MyClass.java
   +- AndroidManifest.xml
   +- ...
+- MyTestProject (references MyLibraryProject)
   +- test
      +- com/mayastudios/MyClassTests.java
   +- AndroidManifest.xml
   +- ...

Здесь манифест Android для тестового проекта:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.spatialite.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.mayastudios" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application android:label="Spatialite-NewApi-UnitTests">
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

Однако, когда я запускаю тестовый проект (из Eclipse с ADT, используя "Run As → Android JUnit Test" ), я получаю следующую ошибку:

Unable to find instrumentation target package: com.mayastudios

Здесь полный журнал консоли:

[2012-04-24 17:24:20 - spatialite-test] Android Launch!
[2012-04-24 17:24:20 - spatialite-test] adb is running normally.
[2012-04-24 17:24:20 - spatialite-test] Performing android.test.InstrumentationTestRunner JUnit launch
[2012-04-24 17:24:20 - spatialite-test] Automatic Target Mode: using device '3732FBC2711300EC'
[2012-04-24 17:24:20 - spatialite-test] Uploading spatialite-test.apk onto device '3732FBC2711300EC'
[2012-04-24 17:24:20 - spatialite-test] Installing spatialite-test.apk...
[2012-04-24 17:24:22 - spatialite-test] Success!
[2012-04-24 17:24:22 - spatialite-test] Launching instrumentation android.test.InstrumentationTestRunner on device 3732FBC2711300EC
[2012-04-24 17:24:22 - spatialite-test] Collecting test information
[2012-04-24 17:24:23 - spatialite-test] Test run failed: Unable to find instrumentation target package: com.mayastudios

Я попытался удалить тег <instrumentation> из манифеста, который не работал.

Единственный способ, которым я до сих пор работал, - создать проект Android по умолчанию (с Activity), ссылаться на него из моего тестового проекта и использовать имя пакета этого проекта Android по умолчанию как targetPackage под <instrumentation>. Но это не то, что я хочу. Я хочу автономный тестовый проект.

Любые предложения?

4b9b3361

Ответ 1

А, ответ такой простой. Ошибка в манифесте Android тестового проекта в строке 3: здесь упоминается неправильный пакет. Итак, исправленный манифест выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mayastudios"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.mayastudios" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application android:label="Spatialite-NewApi-UnitTests">
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

И всем, кто говорит, что вам нужны три проекта (библиотека, проект-под-тест, тестовый проект): они ошибаются. Проект библиотеки и тестовый проект достаточно. В тестовом проекте даже не требуется содержать Activity.