2012-03-21 18 views
33

como dice la documentación de Android: "Tenga en cuenta que la API de prueba de Android admite el estilo de código JUnit 3, pero no JUnit 4". (Testing Fundamentals). Debería quedar claro que JUnit 4 no se puede usar de forma inmediata con Android.¿Por qué JUnit 4 en Android no funciona?

¿Pero por qué es este el caso? ¿Es porque las pruebas se ejecutan dentro del DVM (en que Android Runtime solo tiene soporte para JUnit 3)? En una JVM, uno por sí solo podría elegir el tiempo de ejecución de JUnit que debería usarse. ¿No es esto posible dentro del DVM?

+1

¿Has visto esta pregunta? Quizás es lo que estás buscando: http://stackoverflow.com/questions/2172152/cant-run-junit-4-test-case-in-eclipse – bsimic

+1

gracias, pero en realidad no estoy buscando esta solución. Por supuesto, con esta solución es posible probar POJO con JUnit 4. Pero es imposible usarlo para unidades de código que dependen de las clases de Framework de Android (es decir, se ejecutan en el dispositivo y no en la JVM en mi máquina de desarrollo) Estoy bastante seguro de que es casi imposible ejecutar pruebas JUnit 4 en el DVM, pero estoy buscando una explicación ¿POR QUÉ es este el caso? – Matthew

+0

No sé por qué es así, además de que las implementaciones de prueba de la Unidad Android extienden las bibliotecas JUnit3. Estoy seguro de que las versiones futuras del kit de desarrollo de Android admitirán 4. – bsimic

Respuesta

40

Actualización 2015/10

Ahora es posible a través de la AndroidJUnitRunner, que es parte de la Android Testing Support Library. En resumen, es necesario hacer lo siguiente en un proyecto basado en Gradle:

  1. Añadir las dependencias:

    dependencies { 
        compile 'com.android.support:support-annotations:22.2.0' 
        androidTestCompile 'com.android.support.test:runner:0.4.1' 
    } 
    
  2. Especifique el testInstrumentationRunner:

    android { 
        defaultConfig { 
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
        } 
    } 
    
  3. anotar sus pruebas clase con @RunWith(AndroidJUnit4.class).

  4. Escriba sus pruebas en el estilo JUnit4 normal.

Ver también Espresso setup instructions. Tenga en cuenta que no necesita Espresso en sí para las pruebas simples de JUnit4.

¿Por qué se necesita

Hay muy poca información que pude encontrar en internet sobre este tema. Lo mejor que encontré fue la información en InstrumentationTestRunner.

No hay nada que impida que las pruebas JUnit4 se ejecuten en un dispositivo Android como cualquier otro código Java. Sin embargo, el marco de prueba de Android hace algo de trabajo adicional:

  1. Envía los resultados de las pruebas a su máquina de desarrollo a través de ADB.
  2. Hace instrumentación (no estoy seguro de qué se trata exactamente).

Lo anterior es realizado por algunas extensiones específicamente para JUnit3.

Este código específico de JUnit3 parece ser parte de InstrumentationTestRunner, que forma parte del núcleo del sistema Android. Sin embargo, como es evidente con AndroidJUnitRunner, es posible utilizar un corredor de prueba personalizado que admita JUnit4 u otros marcos.

+0

¿Es posible agregar la dependencia "androidTestCompile" en el archivo Android.mk? si es así, ¿puedes decirme cómo? – Ambi

Cuestiones relacionadas