Concrete Logo
Hamburger button

Utilizando JUnit 5 no Android

  • Blog
  • 13 de Junho de 2018

JUnit é uma das bibliotecas mais populares do mundo Java. A sua quarta versão já foi lançada há muito tempo e muita coisa aconteceu para que precisássemos de uma nova versão. Neste post, vamos mostrar algumas das novidades do JUnit 5 (foram muitas) e como podemos utilizá-las no Android.

Por que uma nova versão?

A quarta versão do JUnit foi lançada há mais de 10 anos, e melhorias eram necessárias tanto para acompanhar a evolução da linguagem como para atender as expectativas sobre testes, que aumentam a cada ano. Alguns pontos importantes para a decisão de construir uma nova versão foram:

  • Alto acoplamento entre o internals do JUnit com ferramentas de IDE, dificultando o acolhimento de novidades;
  • Necessidade de modularização;
  • Java 8 e Java 9;
  • Melhor modelo de extensão, que elimina as limitações e complexidades de Rules e Runners;

Houve uma grande movimentação da comunidade e uma arrecadação de fundos para que o início do desenvolvimento da nova versão fosse possível. No começo, a nova versão foi batizada de JUnit Lambda, e depois se tornou a JUnit 5.

Modularização

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

Diferente de outras versões, o JUnit 5 é composto por diferentes módulos, distribuídos em três projetos:

  • JUnit Platform: elementos estruturais para a execução dos testes na JVM. Fornece API para execução dos testes pela linha de comando e plugins para Gradle e Maven, além de Runner baseado no JUnit 4, para que seja possível rodar qualquer TestEngine na plataforma.
  • JUnit Jupiter: é o JUnit 5 de fato. Aqui está definido o modelo de programação e de extensão, ou seja, todas as anotações, classes e as novidades do JUnit 5;
  • JUnit Vintage: fornece uma TestEngine para rodar testes baseados em JUnit 3 e JUnit 4.

Arquitetura do JUnit 5. Imagem retirada da apresentação do Sam Brannen

Algumas novidades

A nova versão do JUnit possui muitas coisas novas. Uma das mais legais é o suporte ao Java 8, ou seja, agora podemos utilizar lambdas e outros recursos interessantes da linguagem nos testes. Vamos apresentar algumas dessas novidades:

Display Name

Anotação que nos permite colocar um texto mais descritivo para o nosso teste, inclusive com emojis.

Assertions

Temos várias novas asserções na quinta versão do JUnit. Segue alguns exemplos:

assertAll

Nos permite executar um conjunto de asserções. Ele passa por todas as asserções, independentemente de falha, e nos retorna um log detalhado de cada asserção que falhou.

assertThrows

Para validar as exceptions, assim como a mensagem exibida no JUnit 4 utilizava a Rule ExpectedException, no JUnit 5 temos uma asserção que faz esse trabalho para a gente.

Repeated Tests

Particularmente, essa foi uma das novidades que mais gostei. Geralmente na rotina de manutenção de nossa suíte de testes nos deparamos com os chamados flaky tests, aqueles que às vezes rodam com sucesso e outras falham. É muito trabalhoso dar manutenção e resolver esses testes, por que você precisa rodar o muitas vezes para verificar se não está mais intermitente, e rodar manualmente pela IDE é sempre algo exaustivo.

Com essa nova anotação do JUnit 5 podemos especificar quantas vezes queremos que o nosso teste seja executado.

Disabling Tests

No JUnit 4 tínhamos a anotação @Ignore para que na hora da execução os testes anotados pudessem ser ignorados. Agora no JUnit 5 temos a anotação @Disabled, que substitui o @Ignore.

OBS: existem muitas outras novidades importantes do JUnit 5 que não foram citadas nesse post, você pode ver todas elas com exemplos na JUnit 5 User Guide.

Kotlin?

Até agora só apresentamos exemplos com Java, e você pode estar se perguntando se há suporte para Kotlin. A resposta é sim! Você pode ver exemplos de Kotlin aqui.

E no Android?

O time da JUnit Platform oferece um plugin Gradle para uso do JUnit 5 na JVM, mas funciona apenas em aplicações “puramente” Java, não no contexto de uma aplicação Android. Felizmente, o Marcel Schenelle criou um plugin gradle para usar JUnit 5 em projetos Android. Para usar, é só adicionar o android-junit5 como dependência em nosso arquivo build.gradle no módulo do projeto.

OBS: podemos verificar a release atual e também outros detalhes e casos de erros na instalação do plugin no repositório do android-junit5.

O próximo passo é adicionar as configurações e o plugin android-junit5 como dependência no arquivo build.gradle, só que agora no módulo do app.

Para usarmos o JUnit 5 nos nossos testes instrumentados precisamos adicionar mais uma dependência no build.gradle no módulo do app.

OBS: Para a utilização do JUnit 5 nos testes instrumentados o minSdkVersion do seu app tem que ser no mínimo a API 26 😢

Conclusão

Sem dúvidas, o JUnit 5 trouxe novidades importantes e correções de problemas estruturais que a comunidade já estava esperando há algum tempo. Entretanto, a exigência de o app estar na API 26 para podermos usar o JUnit 5 nos testes instrumentados torna inviável a aplicação no Android neste momento. Se você quiser se aprofundar nos conhecimentos sobre JUnit 5, além da User Guide (é claro), recomendo também as palestras do Sam Brannen e do Marc Philipp. E se tiver alguma dúvida ou feedback, pode deixar nos campos abaixo. Até a próxima!

A Concrete, parte da Accenture Technology, é referência em consultoria ágil, facilitando a transformação digital dos clientes ao criar produtos digitais inovadores. Só no capítulo Android contamos com 60 pessoas, que compartilham informações o tempo todo, em talks semanais e treinamentos frequentes. Nossos times têm autonomia para trabalhar e acesso direto aos gerentes, o que facilita a troca de conhecimento e a constante evolução técnica. Quer trabalhar com os melhores? Acesse: concrete.com.br/vagas