Testeo de Android apps

B

Hola,

tengo que hacer una app y quería desarrollarla utilizando TDD. Las partes de puro Java no tienen problema, pero quiero utilizar algún framework para testear el comportamiento de la interfaz. Como esto de Android cambia cada poco tiempo, me gustaría preguntar qué herramientas se están utilizando ahora y qué tal es su integración con Android Studio.

Gracias.

zoeshadow

Yo he incluido hace poco Robolectric en el proyecto en el que estoy trabajando.

Robolectric te permite lanzar los test en tu ordenador mockeando las partes de Android, de momento me ha venido bien, aunque no me he dedicado a testear interfaz pura sino clases que tienen partes que requieren API's de Android.

Y la integración con Android Studio es buena, ya que por debajo utiliza JUnit4, solo hay que anotar la clase para indicarle que los test tienen que correr con el runner de Robolectric.

Por ejemplo, en mi caso tenía una clase que tenía como dependencia un Context de Android:


@RunWith(RobolectricTestRunner.class)
@Config(manifest = "test/res/AlternateManifest.xml")
public class SecurityConfigUtilsTest {

SecurityConfigUtils securityConfigUtils;

@Before
public void setUp() throws Exception {
    securityConfigUtils = new SecurityConfigUtils(Robolectric.getShadowApplication().getApplicationContext());
}

@Test
public void testGetPid() throws Exception {
	...
}

...
}
1 1 respuesta
Tig

Yo también uso Robolectric, aunque a mí solo me funcionan los test lanzándolos desde consola con gradle. Por lo menos antes no se podían integrar con AS (sí con Eclipse) y había que hacer una movida en gradle para que funcionaran. #1, ¿podrías poner tu build.gradle?

También he usado Mockito (para mockear objetos) y estaba planteándome usar Dagger (dependency injection), pero por ahora estoy con otro proyecto sin TDD y lo tengo apartado.

En mi cabeza, lo ideal sería

  • JUnit para las clases sin dependencia de Android (los tests más rápidos)
  • Robolectric para las clases que sí dependen de Android (más lentos que JUnit pero mucho más rápidos que lanzar la app)
  • Espresso para testear el interfaz (https://code.google.com/p/android-test-kit/wiki/Espresso). Es una herramienta oficial de Google. Más lenta que los demás porque lanza la app, pero necesaria.

Por ahora me he conformado con Robolectric porque Gradle está un poco verde y no he conseguido configurarlo bien. Si alguien sabe más, el conocimiento es bienvenido :D

2 respuestas
zoeshadow

#3 Yo es que uso IntelliJ con Maven ( vivo al limite ) en el pom lo tengo puesto así, la clave creo que es donde tengas colocados los tests.

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>

    <dependency>
        <groupId>org.robolectric</groupId>
        <artifactId>robolectric</artifactId>
        <version>2.2</version>
        <scope>test</scope>
    </dependency>

Y tengo en la carpeta test/* todos los tests, y tan solo tengo que hacer un botón derecho -> run all test ( con JUnit ) desde el IDE

1 respuesta
Tig

#4 Al límite vivo yo que uso AS y Gradle :f5: :f5:

Lo de las dependencias no es el problema en Gradle, el problema es configurar los varios tipos de test y lanzarlos todos.

B

#2, #3 gracias, en cuanto tenga un rato lo miro y os digo.

PD: Ya había visto lo de Robolectric, pero leí por ahí que era un poco mierda con Android Studio. La verdad es que está bastante verde (AS, quiero decir).

Usuarios habituales