lunes, 1 de agosto de 2016

Cómo ejecutar feature tests de Cucumber en android, pasos para Android Studio 2.1






Estos pasos no son para tests de UI, si quieres correr tests de integracion con Cucumber te recomiendo usar Calabash.


  1. Crear un nuevo proyecto en Android Studio.
     
  2. Abrir build.gradle y agregar las dependencias:

    androidTestCompile 'junit:junit:4.12'
    androidTestCompile group: 'info.cukes', name: 'cucumber-java', version: '1.2.2'
    androidTestCompile group: 'info.cukes', name: 'cucumber-core', version: '1.2.2'
    androidTestCompile group: 'info.cukes', name: 'cucumber-html', version: '0.2.3'
    androidTestCompile group: 'info.cukes', name: 'cucumber-jvm-deps', version: '1.0.3'
    androidTestCompile group: 'info.cukes', name: 'gherkin', version: '2.12.2'
    androidTestCompile 'info.cukes:cucumber-android:1.2.0@jar'
    androidTestCompile group: 'info.cukes', name: 'cucumber-junit', version: '1.2.2'

    deben ser exactamente estos números de version. Las últimas versiones de Cucumber están compiladas con java 8, lo que no es soportado por android (por ahora)

     
  3. Necesitamos configurar en gradle que los tests sean ejecutados por Cucumber. Para eso hay que agregar en build.gradle el instrumentation runner, dentro de defaultConfig

    defaultConfig {
        applicationId "my.application.package"    minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"    
        testInstrumentationRunner "cucumber.api.android.CucumberInstrumentation"
    }
     
  4. Crea una nueva carpeta dentro de assets para los features de Cucumber en src/androidTest/assets
     
  5. Gradle no sabe nada de esta nueva carpeta con los features. Hay que configurar esta carpeta para que Cucumber pueda leer los features y ejecutarlos. Por ej. debajo de defaultConfig

    defaultConfig {
        ...
    }
    sourceSets {
        androidTest {
            assets.srcDirs = ['src/androidTest/assets']
        }
    }
     
  6. Crear una nueva carpeta llamada "features" dentro de la carpeta de assets. Todos los archivos de features van a guardarse aquí (se puede usar subfolders). Acá un ejemplo de un feature que debe ir en un archivo en esta carpeta:

    Feature: Calculator
    
      Scenario Outline: a simple sum
        Given I have numbers 2 and 3
        When I sum
        Then the result is 5
     
  7. Este paso es muy importante. Crea tus tests en el subpaquete "test" de tu paquete principal, por ejemplo my.application.package.test

    Ejemplo de un test para el feature anterior:

    @CucumberOptions(features = "features")
    public class CalculatorFeatureTest {
    
        private int mNum1;
        private int mNum2;
        private int mResult;
    
        @Given("^I have numbers (-*\\d+) and (-*\\d+)$")
        public void i_have_numbers_and(int n1, int n2) throws Throwable {
            mNum1 = n1;
            mNum2 = n2;
        }
    
        @When("^I sum$")
        public void i_sum() throws Throwable {
            mResult = mNum1 + mNum2;
        }
    
        @Then("^the result is (-*\\d+)$")
        public void the_result_is(int result) throws Throwable {
            assertEquals(mResult, result);
        }
    
    }

    La annotation @CucumberOptions especifica la carpeta adentro de assets, en este caso "features"
     
  8. En Android Studio, click derecho en el paquete con los tests, y elegir "Ejecutar tests en ..."
     
  9. Listo
Estos pasos están basados en los pasos descriptos en http://mdzyuba.blogspot.nl/2015/01/cucumber-jvm-and-android-studio.html






No hay comentarios:

Publicar un comentario