Quantcast
Channel: marcelopazzo.com
Viewing all articles
Browse latest Browse all 4

Testes no Android com Robolectric

$
0
0

Muito tempo passou desde meu último post, espero conseguir manter um ritmo um pouco melhor a partir de agora.

Pretendo fazer uma série de posts sobre como testar aplicações Android. Pra começar, vou falar do Robolectric, uma ferramenta que, a meu ver, criou uma forma viável de fazer TDD com Android.

Antes do Robolectric, tínhamos que fazer testes usando um dispositivo e esperando enquanto a aplicação real era instalada e a aplicação de testes era instalada e executada. Isso inviabilizava a idéia de escrever um teste pra cada código do produto que vai ser escrito, como orienta o TDD.

Dito isso, vamos ao que interessa: código!

Estou assumindo que você já tem alguma experiência com Android e não irei entrar em detalhes da criação do projeto. Criei uma aplicação limpa no Android Studio (a versão atual é a 0.3.6). Essa aplicação está disponível aqui.

Usando o gradle

Lembrando que o Android Studio usa o Gradle pra montar as dependências e fazer o build da aplicação, nossos trabalhos começam no build.gradle.

Para conseguirmos compilar o android, precisamos do plugin android:

apply plugin: 'android'

E os seguintes detalhes da aplicação, que são criados automaticamente pelo Android Studio baseado nos seus passos na criação da App:

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 18
    }
    buildTypes {
        release {
            runProguard true
            proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
    productFlavors {
        defaultFlavor {
            proguardFile 'proguard-rules.txt'
        }
    }
}

Fazendo isso hoje, você vai descobrir que o plugin android não é compatível com a última versão do gradle:

Gradle version 1.8 is required. Current version is 1.9. If using the gradle wrapper, (...)

Pra adiandar, o plugin do Robolectric só é compatível com gradle 1.6. Você deve instalá-lo e diminuir a versão do gradle usado também no build.gradle. Isso é feito nas dependencies do buildscript:

dependencies {
    classpath 'com.android.tools.build:gradle:0.5.+'
}

Feito isso podemos testar o build:

$ gradle build
(...)
:TutorialRobolectric:build

BUILD SUCCESSFUL

Total time: 9.245 secs

Ótimo! Com o build pronto, o próximo passo é criar uma classe de teste e colocar o Robolectric pra rodar.

Criando um teste

Verificando a aplicação básica criada, vemos que a única Activity dela é a MainActivity, que se parece com isso:

Main Activity

Um teste bem simples consiste em verificar se esse texto é realmente exibido. Pra isso, devemos criar dentro da pasta src as pastas test/java e nela devemos seguir a estrutura de pacotes igual a estrutura da aplicação real. Então criamos o teste:

@RunWith(RobolectricTestRunner.class)
public class MainActivityTest {

  private MainActivity activity;
  private TextView textView, fragmentTextView;

  public static final String GREETINGS = "Hello world!";

  @Before public void setUp() {
    activity = Robolectric.buildActivity(MainActivity.class)
    .create().get();

    textView = (TextView) activity.findViewById(R.id.hello);
  }

  @Test public void shouldGreet() {
    assertEquals(GREETINGS, textView.getText());
  }
}

Adicionando o Robolectric

Pra conseguirmos rodar o Robolectric, precisamos adicionar o plugin gradle-android-test-plugin, desenvolvido pelo Jake Wharton, criador de várias boas bibliotecas pro Android.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
        classpath 'com.squareup.gradle:gradle-android-test-plugin:0.9.+'
    }
}
apply plugin: 'android'
apply plugin: 'android-test'

Último passo: adicionar a dependência do Robolectric. Infelizmente a última versão estável (2.2), não é compatível com o gradle. Estou usando um SNAPSHOT do 2.3. Para isso devemos adicionar o repositório dos snapshots deles:

maven {
    url 'https://oss.sonatype.org/content/repositories/snapshots/'
}

E por fim:

dependencies {
    testCompile 'junit:junit:4.11'
    testCompile 'org.robolectric:robolectric:2.3-SNAPSHOT'
}

Agora basta rodar um último gradle build e na etapa de teste ele irá gerar um relatório com os testes executados:

Testes executados

Qualquer dúvida, a versão final do código está disponível aqui.
E o build.gradle completo também!


Viewing all articles
Browse latest Browse all 4

Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Trending Articles


Ang Nobela sa “From Darna to ZsaZsa Zaturnnah: Desire and Fantasy, Essays on...


Lola Bunny para colorear


Dino Rey para colorear


Girasoles para colorear


Dibujos de animales para imprimir


Renos para colorear


Dromedario para colorear


Love Quotes Tagalog


Mga Patama Quotes at Pamatay Banat Quotes


RE: Mutton Pies (mely)


Gwapo Quotes : Babaero Quotes


Kung Fu Panda para colorear


Libros para colorear


Mandalas de flores para colorear


Dibujos para colorear de perros


Toro para colorear


mayabang Quotes, Torpe Quotes, tanga Quotes


Long Distance Relationship Tagalog Love Quotes


Love Quotes Tagalog


Mga Tala sa “Unang Siglo ng Nobela sa Filipinas” (2009) ni Virgilio S. Almario





Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC