Tagon8 Blog

Como testar aplicações Android

Você sabe como testar aplicações Android?

Umas das práticas adotadas pela Tagon8 para uma melhor qualidade dos nossos projetos, é o uso de testes nas aplicações, também conhecida como TDD (Test Driven Development). Consiste em desenvolver suas aplicações com base em um teste já escrito, ou desenvolver um caso de teste para cobrir uma funcionalidade implementada.

Seu ciclo compreende 3 etapas básicas, chamadas de “red”, “green” e “refactor”. Na fase “red” o código ainda não funciona. Na etapa “green” a lógica passa pelo caso de teste especificado.  Na fase de “refactor” a lógica já funcional é refatorada, eliminando código desnecessário e simplificando trechos mais complexos.

O framework Android provê algumas ferramentas para a realização dos testes das aplicações, baseadas na ferramenta JUnit.

Abordando os testes unitários, seguem alguns exemplos de testes funcionais para seu aplicativo Android. Utilizando as ferramentas nativas da SDK,  os “Instrumentations” são as principais a serem utilizadas, que podem simular eventos na interface gráfica do sistema.

Iniciando, criaremos uma classe para abranger os testes para uma determinada Activity.

 

public class MyFirstTestActivityTest
        extends ActivityInstrumentationTestCase2<MyFirstTestActivity> {
}

 

O método setUp() faz a configuração da sua classe de testes, onde irão todas as configurações para que o caso de teste rode. Nesse caso, buscamos a Activity que estamos testando e buscaremos um TextView nessa Activity.

 

public class MyFirstTestActivityTest
        extends ActivityInstrumentationTestCase2<MyFirstTestActivity> {

    private MyFirstTestActivity mFirstTestActivity;
    private TextView mFirstTestText;

    public MyFirstTestActivityTest() {
        super(MyFirstTestActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mFirstTestActivity = getActivity();
        mFirstTestText =
                (TextView) mFirstTestActivity
                .findViewById(R.id.my_first_test_text_view);
    }
}

 

Primeiro criaremos nosso método de testes, chamado testPreConditions(), usado para testar se todas as dependências necessárias para rodar a classe de testes estão satisfeitas.

Note que usaremos os métodos assertNotNull() garantindo que os objetos passados por parâmetro não são nulos. Estamos verificando se nossa Activity e nosso TextView são nulos.

 

public class MyFirstTestActivityTest
        extends ActivityInstrumentationTestCase2<MyFirstTestActivity> {

    private MyFirstTestActivity mFirstTestActivity;
    private TextView mFirstTestText;

    public MyFirstTestActivityTest() {
        super(MyFirstTestActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mFirstTestActivity = getActivity();
        mFirstTestText =
                (TextView) mFirstTestActivity
                .findViewById(R.id.my_first_test_text_view);
    }

    public void testPreconditions() {
        assertNotNull("mFirstTestActivity is null", mFirstTestActivity);
        assertNotNull("mFirstTestText is null", mFirstTestText);
    }
}

 

Vamos realmente testar nossa Activity, verificando se o texto mostrado no TextView é correspondente ao que esperamos. Usaremos o método assertEquals() para verificar se o valor do TextView é o esperado.

 

public class MyFirstTestActivityTest
        extends ActivityInstrumentationTestCase2<MyFirstTestActivity> {

    private MyFirstTestActivity mFirstTestActivity;
    private TextView mFirstTestText;

    public MyFirstTestActivityTest() {
        super(MyFirstTestActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mFirstTestActivity = getActivity();
        mFirstTestText =
                (TextView) mFirstTestActivity
                .findViewById(R.id.my_first_test_text_view);
    }

    public void testPreconditions() {
        assertNotNull("mFirstTestActivity is null", mFirstTestActivity);
        assertNotNull("mFirstTestText is null", mFirstTestText);
    }

    public void testMyFirstTestTextView_labelText() {
        final String expected =
                mFirstTestActivity.getString(R.string.my_first_test);
        final String actual = mFirstTestText.getText().toString();
        assertEquals(expected, actual);
    }
}

 

Estes são os conceitos básicos de testes para a plataforma Android. Em alguns casos também podem ser utilizados casos de testes independentes de Activities, tendo como exemplo o teste de requisições remotas. Futuramente espero trazer mais informações relacionadas a testes para Android, utilizando ferramentas de terceiros e que independem do uso de um aparelho com Android.