Documentação Teste Unitário
Esse projeto é uma série de documentações de ferramentas de teste unitário em diversas linguagens.
Projeto já adicionado aos favoritos. Clique aqui para ver todos seus favoritos
Obrigado pela sua avaliação, deixe o seu feedback nos comentários :D
Introdução
JUnit é uma API de código aberto para a criação de testes unitários em Java, bem como outras linguagem compatíveis com a JVM. Um dos seus principais projetistas, o cientista Erich Gamma, conhecido pelo livro Design Patterns: Elements of Reusable Object-Oriented Software, citou como a motivação por trás do JUnit permitir a criação de testes que são fáceis de escrever e executar. Aqui falamos sobre como começar nesta ferramenta.
Visão geral
Escrever testes é a forma mais básica de garantir a qualidade do código. Ainda nos primeiros passos na programação costuma-se introduzir no código pequenos trechos de teste para verificar se o programa se comporta como esperado, em um dado momento da sua execução, mesmo sem usar nenhuma técnica para isso. Um exemplo é quando criamos uma classe com um método main() em um lugar qualquer do projeto, apenas para verificar se alguma funcionalidade do sistema está correta.
public static void main(String[] args) {
ProdutoRepositorio repositorio = new ProdutoRepositorio();
Produto produto = new Produto("Aparelho de barbear", 39.9, ...);
repositorio.salvar(produto);
}
A medida que ganhamos experiência, principalmente quando começamos a lidar com sistemas maiores, é natural sentir falta de uma metodologia de testes que permita medir a cobertura do código testado, tornando fácil criar os cenários nos quais as falhas serão percebidas. Os testes unitários suprem essas e outras carências no processo de teste de código.
Supondo que com o código anterior desejamos validar se um produto que é cadastrado duas vezes com o mesmo nome faz o programa falhar, poderíamos escrever o seguinte teste para comprovar o lançamento de uma exceção.
@Test
public void testaAGravacaoDeUmProdutoJaCadastrado() {
ProdutoRepositorio repositorio = new ProdutoRepositorio();
Produto produto = new Produto("Aparelho de barbear", 39.9, ...);
assertThrows(repositorio.salvar(produto), ProdutoComNomeJaCadastradoException.class) ;
}
Geralmente, escrevemos testes unitários com o auxílio de alguma API, que fornece as anotações e métodos que precisamos para isso. O programador Java conta com uma das primeiras criadas para esse fim e que influenciou o surgimento de muitas outras, o JUnit. Com ele, a partir de anotações e algumas declarações, conseguimos avaliar classes e métodos para saber se eles apresentam o comportamento desejado. Com o JUnit, também evitamos aquela prática tão comum de criar um método main() em qualquer lugar do projeto, apenas para saber se um certo trecho código está correto.
Instalação
O primeiro pré-requisito para executar testes com o JUnit é ter em seu ambiente de desenvolvimento o Java versão 8 ou superior. Quanto a instalação, as duas principais ferramentas de gerenciamento de dependências em projetos Java atualmente são o Maven, predominante em projetos para a web, e o Gradle, padrão no Android. Aqui falaremos sobre como instalar o JUnit 5 em ambos os gerenciadores de dependência.
maven
Uma das formas mais fáceis de instalar o JUnit é através do seu repositório no maven. Para isso, em seu projeto localize o arquivo pom.xml, que é criado pela IDE no diretório raiz na maioria dos casos, e adicione nele as seguintes dependências:
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Note que usamos acima o escopo de teste na declaração da dependência. Isso indica que os pacotes junit-jupiter-api e junit-jupiter-params serão necessários apenas durante as etapas de compilação e execução dos testes.
gradle
Caso você esteja utilizando o Gradle e o JUnit ainda não esteja disponível em seu ambiente de desenvolvimento, sua instalação pode ser feita da seguinte forma:
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.0'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.3.0'
}
test {
useJUnitPlatform()
}
Embora o JUnit possa ser instalado manualmente em um projeto Android, na maioria das vezes isso não é necessário, pois o Android Studio já adiciona o suporte aos testes unitários no projeto.
Configuração
Para executar os testes com o JUnit precisamos de um motor de execução, que pode ser obtido pelo JAR junit-jupiter-engine, a qual também está disponível no repositório central do maven. A partir da sua versão 2016.2, o Intellij IDEA passou a integrar suporte a execução de testes dessa maneira, trazendo para o projeto os JARs necessários para isso. Contudo, apenas em versões posteriores isso passou a feito baseado na versão do JUnit utilizado pelo projeto, aquela informada no pom.xml. Portanto, caso você esteja trabalhando em uma versão da API diferente daquela hospedada pela IDE erros estranhos podem ser percebidos durante a execução dos testes.
Uma forma de evitar essa situação é adicionando manualmente os JARs que devem estar disponíveis em tempo de execução, sendo eles o junit-platform-launcher, junit-jupiter-engine e junit-vintage-engine. Em caso de problemas, veja abaixo como fazer essas configurações no maven e gradle.
maven
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.3.0</version>
<scope>test</scope>
</dependency>
gradle
testRuntime("org.junit.platform:junit-platform-launcher:1.3.0")
testRuntime("org.junit.jupiter:junit-jupiter-engine:5.3.0")
testRuntime("org.junit.vintage:junit-vintage-engine:5.3.0")
No Intellij IDEA, quando criamos um projeto do maven, em sua estrutura é adicionada a pasta test. É dentro dela que criamos os pacotes e as classes de teste do projeto.