2010-08-30 12 views
80

Estoy escribiendo un proyecto de biblioteca Android basado en la clase de mapa de bits de Android (llámalo AndroindLib) que contiene solo la clase de utilidad (sin actividad). Traté de probarlo usando Android JUnit, pero sigue quejándose de que no puede encontrar el AnroidLib.apkCómo probar un proyecto de biblioteca Android

¿Cuál es la forma correcta de probar la unidad Android Library Project?

+1

O (** alerta de enchufe descarado **) podría utilizar un proyecto que creé: Android Library Test Harness (lo que me gusta llamar "Alt H"). Está disponible como un repositorio de git: https://gitorious.org/alth El proyecto aún está en desarrollo y la documentación es un poco escasa, así que no dude en contactarme si tiene alguna pregunta. – i41

Respuesta

60

Citando the documentation:

"Hay dos formas recomendadas de la creación de las pruebas de código y recursos en un proyecto de biblioteca:

  • Puede configurar un proyecto de prueba que los instrumentos de un proyecto de aplicación que depende del proyecto de la biblioteca. A continuación, puede agregar pruebas al proyecto para las características específicas de la biblioteca.

  • Puede configurar un proyecto de aplicación estándar que dependa de la biblioteca y poner las ins trumentation en ese proyecto. Esto le permite crear un proyecto independiente que contiene tanto las pruebas/instrumentaciones y el código para probar."

+19

así que, básicamente, todo lo que tiene que hacer es agregar la biblioteca a su proyecto de prueba y probar el proyecto de prueba. – njzk2

+0

El enlace ya no es válido, ¿hay alguna posibilidad de que nos indique el actual? –

+0

Parece que: http://developer.android.com/guide/developing/projects/index.html#testing –

0

Si sus clases ulitiy no dependen de ningún código específico de Android, puede usar las pruebas estándar de la unidad JUnit. No es necesario usar las versiones de Android.

+0

dependo de la clase de mapa de bits de Android ... – Lily

+1

Esto no funciona porque el JUnit estándar se compila con la JVM estándar, mientras que los archivos de Java se compilan en la VM Dalvik. –

17

En su proyecto de prueba simplemente cambie el nombre del paquete para que coincida con el paquete de su biblioteca. Por ejemplo, tiene una biblioteca cuyo paquete es "com.example.lib". Cree un proyecto de prueba dirigido a su biblioteca. En el archivo de manifiesto verá package="com.example.lib.test" y . Simplemente cambie el paquete de "com.example.lib.test" a "com.example.lib" (targetPackage salir como está).

Además, asegúrese de que la biblioteca se hace referencia a su proyecto de prueba NO en la ruta de compilación de Java, pero como de costumbre biblioteca de Android: en Eclipse que deben ser expuestos como biblioteca en Project->Properties->Android pestaña, pero no en Project->Properties->Java Build Path lengüeta.

Luego ejecute las pruebas.

+0

Sus ideas tenían sentido para mí, por lo que la prueba se dirigió a sí misma (como la aplicación) y la aplicación está vinculada a la biblioteca ... pero no pude hacer que funcionara a través de la compilación de hormiga ni IntelliJ .... como el archivo .apk (esperado para la aplicación bajo prueba) no existía cuando intentó instalarlo, ya que se está compilando para "probar/bin /.- debug.apk" –

+0

Lo tengo que trabajar simplemente cambiando el paquete nombre del proyecto de prueba en su manifiesto (y el paquete bajo prueba, que debería ser el mismo) que NO coincida con el nombre del paquete del proyecto de la biblioteca, más la eliminación de la referencia al proyecto de prueba objetivo en el archivo ant.properties. –

+1

Creo que esta es una mejor respuesta que la aceptada, que solo echos la documentación - en mi humilde opinión. –

0

NOTA: Esta solución se basa en el uso de Eclipse Indigo (3.8.2) y podría tener que implementarse de forma ligeramente diferente para otro IDE, aunque los principios básicos serán los mismos.

que tenían problemas similares y me encontré con que haga lo siguiente siempre funciona:

(NOTA:. Estas instrucciones son para la construcción de un nuevo grupo de proyecto desde cero Si has partes del grupo de proyecto ya construido, entonces es posible que tenga que modificar sus proyectos para que se conecten en la misma forma.)

  1. crear un nuevo proyecto de biblioteca de Android marcando la casilla de verificación "es la biblioteca" durante la creación. (por ejemplo, un proyecto de Android llamado "RemingtonAndroidTools").
  2. Cree el proyecto de la biblioteca Android y verifique que haya creado un archivo jar en la carpeta bin. (Por ejemplo, un archivo jar llamado "RemingtonAndroidTools.jar".)
  3. crear un proyecto Android vacío para probar la aplicación para Android que servirá como un Test App Android. (Por ejemplo, un proyecto de Android llamado "RemingtonAndroidToolsTestApp"). No necesitará modificar el código fuente o los recursos del proyecto de la aplicación de prueba de Android a menos que tenga algo que deba agregarse para la prueba. Se pueden probar muchas cosas sin modificaciones al Android App App Project. El proyecto Android Test App es un puente entre su proyecto de biblioteca Android y el proyecto Android Junit que hace posible la prueba del proyecto de la biblioteca Android a través de Android Junit.
  4. vaya a la pestaña Biblioteca de Java Build Path para el proyecto Android Test App ("RemingtonAndroidToolsTestApp" en este ejemplo).
  5. Añadir el archivo JAR ("RemingtonAndroidTools.jar" en este ejemplo) del Proyecto Biblioteca androide ("RemingtonAndroidTools" en este ejemplo) a través del botón "Añadir tarros ...".
  6. Cree un nuevo proyecto de prueba de Android (por ejemplo, "RemingtonAndroidToolsTester") que servirá como un analizador de biblioteca de Android y seleccione el proyecto Android App App ("RemingtonAndroidToolsTestApp" en este ejemplo) como destino.
  7. vaya a la pestaña Biblioteca de Java Build Path para el proyecto Android Biblioteca Tester ("RemingtonAndroidToolsTester" en este ejemplo).
  8. Añadir el archivo JAR ("RemingtonAndroidTools.jar" en este ejemplo) del Proyecto Biblioteca androide ("RemingtonAndroidTools" en este ejemplo) a través del botón "Añadir tarros ...".
  9. Busque la última carpeta de su paquete de Android en el proyecto Android Library Tester ("danny.remington.remington_android_tools_test_app.test" por ejemplo) y agregue una clase de prueba ("MainActivityTest" por ejemplo) que hereda de ActivityInstrumentationTestCase2.
  10. Edite la clase de prueba ("TestActivityTest" en este ejemplo) para usar la actividad (por ejemplo "TestActivity") de la aplicación de prueba de Android ("RemingtonAndroidToolsTestApp" en este ejemplo) como parámetro para ActivityInstrumentationTestCase2.
  11. Editar la clase de prueba ("TestActivityTest" en este ejemplo) y crear un constructor por defecto que hace una llamada a super (Clase) y que pasa en la clase del Test App Android ("TestActivity.class", por ejemplo).

Usted debe terminar con tres proyectos (Biblioteca de Android, Android aplicación de prueba, Android Biblioteca Tester) que se parecen a esto:

enter image description here

enter image description here

enter image description here

Deberías terminar con una clase para probar tu biblioteca de Android que se parece a esto:

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); 
    } 

} 

Luego puede agregar cualquier prueba que desee. No será necesario que haga referencia a la aplicación de prueba de Android ("RemingtonAndroidToolsTestApp" en este ejemplo) para ejecutar sus pruebas a menos que requieran acceso a un componente específico de Android (como la carpeta Activos, por ejemplo). Si necesita acceder a cualquier componente específico de Android, puede hacerlo modificando la aplicación de prueba de Android ("RemingtonAndroidToolsTestApp" en este ejemplo) y luego haciendo referencia a ella a través de la instrumentación proporcionada por la API estándar de Android Junit.(Puede leer más sobre esto aquí: http://developer.android.com/tools/testing/testing_android.html)

1

por la documentation:

Comprobación de un módulo de la biblioteca es el mismo que probar una aplicación. La principal diferencia es que la biblioteca y sus dependencias se incluyen automáticamente como dependencias de la prueba APK. Esto significa que el APK de prueba incluye no solo su propio código, sino también el AAR de la biblioteca y todas sus dependencias. Como no hay una "aplicación bajo prueba" por separado, la tarea androidTest instala (y desinstala) solo la prueba APK. Al fusionar varios archivos de manifiesto, Gradle sigue el orden de prioridad predeterminado y fusiona el manifiesto de la biblioteca en el manifiesto principal de la APK de prueba.

+0

¿Qué tarea ejecutar? prueba de gradle, o gradle androidTest? androidTest no es una tarea. – Sunnyday

Cuestiones relacionadas