2011-10-25 27 views
5

Estoy tratando de ejecutar la prueba Junit de instrumentos android usando la línea de comandos. Estoy usando el siguiente comando y está lanzando la prueba correcta.Ejecutar la prueba Junit usando instrumentación android en un paquete con clases en orden específico

adb shell am instrument -w com.android.foo/android.test.InstrumentationTestRunner 

Mi paquete de proyectos androide tiene los siguientes archivos de código fuente de Java (en orden alfabético)

com.android.foo

ActivityTest

ContactsTest

LaunchTest

SendTest

Cuando ejecuto la prueba con el comando mencionado anteriormente, la prueba comienza a ejecutar ActivityTest primero y así sucesivamente. Esto no es lo que quiero, quiero que primero ejecute LaunchTest seguido de ContactTest, SendTest y ActivityTest. He intentado utilizar

adb shell am instrument -w -e class com.android.foo.LaunchTest,com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner 

pero me da un error puede deberse a que no estoy utilizando la clase TestCase en mi código pero en cambio mi LaunchTest y otros se extiende ActivityInstrumentationTestCase2.

se agradece cualquier ayuda.

+1

Puesto que usted está interesado en ejecutar sus pruebas en un orden determinado, implica que dependen el uno del otro. Las pruebas unitarias deben escribirse de forma que cada una sea completamente independiente y el orden en el que se ejecutan no tiene importancia. – elevine

+0

@ Noble6 Actualización: Android Studio para ejecutar el archivo de prueba http://goo.gl/ac06C0 y demostración para crear testcase http://goo.gl/bQFlmU – nitesh

Respuesta

6

fin llegué a trabajar con el siguiente comando:

adb shell am instrument -e class com.android.foo.LaunchTest -w com.android.foo/android.test.InstrumentationTestRunner 
+0

¿De qué directorio ejecutó este comando, el mismo directorio que LaunchTest? –

0

Si el orden en que se ejecutan las pruebas es importante, las pruebas son frágiles y deben cambiarse. Significa que dependen el uno del otro e idealmente, las pruebas son independientes. Por lo general, la mayoría de las pruebas son tan independientes y de grano fino que las llamamos Pruebas Unitarias.

Un comienzo común para romper este tipo de dependencia es utilizar los métodos setup() y teardown() en su TestCase. Aquí puede prepararse para sus pruebas para ejecutar y limpiar cualquier cambio que puedan hacer sus pruebas.


Dicho esto, el android.test.InstrumentationTestRunner no tiene una opción para Reording sus conjuntos de pruebas. Sin embargo, esto puede hacerse de dos maneras.

1) puede crear su propia implementación de android.test.InstrumentationTestRunner que haga un pedido especial. Esto le dará la mayor flexibilidad, pero puede tomar más tiempo.

2) am instrument puede tomar el nombre de la clase como argumento para que pueda ejecutar las pruebas en orden pero ejecutando varios comandos (posiblemente combinados en un script bash). Esto se hace agregando los argumentos "-e class [classname of test]".


Además, hay un error en la forma en que se está ejecutando sus pruebas:

adb shell am instrument -w -e class com.android.foo.LaunchTest,com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner 

trata de una duración de dos clases.Para ello es necesario cambiar a esto:

adb shell am instrument -w -e class com.android.foo.LaunchTest com.android.foo/android.test.InstrumentationTestRunner 
adb shell am instrument -w -e class com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner 
+0

Gracias, ya estoy usando setup() y desmontaje() pero el la cosa es que LaunchTest inicia la aplicación y registra al cliente; por lo tanto, si no es la primera prueba para ejecutar, todas las otras pruebas fallarán ya que la pantalla del dispositivo se colgará en la pantalla de registro. Cuando intento usar -e clase obtengo un error que no puede encontrar la información de la instrumentación. –

+0

Solo puede especificar una clase con "-e clase". Tal vez pueda factorizar la prueba de registro y ejecutar el registro durante la configuración() – spatulamania

+0

. Solo estoy especificando 1 clase pero obtengo el error. Si no menciona ninguna clase, la prueba se ejecuta. –

Cuestiones relacionadas