Artigo original: JUnit Test with Maven in VSCode
Escrito por: Clark Jason Ngo
Instalar o VSCode
Configuração aqui: Configurando o Visual Studio Code
Instalar e criar um projeto do Maven
Guia de instalação completo aqui: Maven – Maven em 5 minutos (em inglês)
Se você tem o Maven instalado, siga estas etapas:
Gerar o projeto
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Mudar para o diretório do projeto
cd my-app
Construir o projeto
mvn package
Testar e compilar o projeto
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
Você deve obter uma saída com: Hello World!
Modificar nosso projeto
Vamos começar criando funções matemáticas simples
Procure o arquivo App.java
e substitua o conteúdo por este código:
package com.mycompany.app;
public class App
{
public static int add(int firstNumber, int secondNumber) {
return firstNumber + secondNumber;
}
public static int multiply(int multiplicand, int multiplier) {
return multiplicand * multiplier;
}
public static int divide(int dividend, int divisor) {
if (divisor == 0)
throw new IllegalArgumentException("Cannot divide by zero (0)."); // Não pode dividir por zero (0).
return dividend / divisor;
}
public static void main( String[] args )
{
System.out.println(App.add(3, 3));
}
}
Procure por AppTest.java
e substitua o conteúdo por este código:
package com.mycompany.app;
import static org.junit.Assert.assertTrue;
import org.junit.Assert;
import org.junit.Test;
/**
* Teste unitário para App simples.
*/
public class AppTest
{
/**
*Teste Rigoroso :-)
*/
@Test
public void shouldAnswerWithTrue() // deveResponderComVerdadeiro
{
assertTrue( true );
}
@Test
public void add_TwoPlusTwo_ReturnsFour() { // adicionar_DoisMaisDois_RetornaQuatro
// Organizar
final int expected = 4;
// Agir
final int actual = App.add(2, 2);
// Afirmar
Assert.assertEquals(expected, actual);
}
@Test
public void multiply_FourTimesTwo_ReturnsEight() { // multiplicar_QuatroVezesDois_RetornaOito
// Organizar
final int expected = 8;
// Agir
final int actual = App.multiply(4, 2);
// Afirmar
Assert.assertEquals(expected, actual);
}
@Test
public void divide_TenDividedTwo_ReturnsFive() { // dividir_DezDivididoPorDois_RetornaCinco
// Organizar
final int expected = 5;
// Agir
final int actual = App.divide(10, 2);
// Afirmar
Assert.assertEquals(expected, actual);
}
}
Você pode continuar criando testes como, por exemplo:
@Test
public void multiply_FiftyTimesTwo_ReturnsOneHundred() // multiplicar_CinquentaVezesDois_RetornaCem
{
// // Organizar
final int expected = 100;
// // Agir
final int actual = App.multiply(50, 2);
// // Afirmar
Assert.assertEquals(actual, expected);
}
Construir o projeto
mvn package
Saída:
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.mycompany.app.AppTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.026 s - in com.mycompany.app.AppTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
Testar e compilar o projeto
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
Saída:
6
Hello World!
Uma maneira alternativa de executar os testes é clicar em Run Test dentro de AppTest.java
No exemplo abaixo, Run Test está localizado logo abaixo da linha de código 44.
Visualizar testes e relatório de teste
Migrando do JUnit 4 para o JUnit 5
Altere as dependências do seu pom.xml
para:
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
</dependencies>
Altere seu AppTest.java
para:
package com.mycompany.app;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
/**
* Teste unitário para App simples.
*/
public class AppTest
{
/**
* Teste Rigoroso :-)
*/
@Test
public void shouldAnswerWithTrue() // deveResponderComVerdadeiro
{
assertTrue( true );
}
@Test
public void add_TwoPlusTwo_ReturnsFour() { // adicionar_DoisMaisDois_RetornaQuatro
// Organizar
final int expected = 4;
// Agir
final int actual = App.add(2, 2);
// Afirmar
assertEquals(expected, actual);
}
@Test
public void multiply_FourTimesTwo_ReturnsEight() { // multiplicar_QuatroVezesDois_RetornaOito
// Organizar
final int expected = 8;
// Agir
final int actual = App.multiply(4, 2);
// Afirmar
assertEquals(expected, actual);
}
@Test
public void divide_TenDividedTwo_ReturnsFive() { // dividir_DezDivididoPorDois_RetornaCinco
// Organizar
final int expected = 5;
// Agir
final int actual = App.divide(10, 2);
// Afirmar
assertEquals(expected, actual);
}
}
Adicionando cobertura de teste
Verifique o relatório de cobertura de teste
No VSCode, abra o Extension MarketPlace e pesquise Coverage Gutters
Clique no botão Instalar (ou Install)
Abra o arquivo pom.xml
na sua pasta raiz e substitua o conteúdo pelo pom.xml no GitHub para adicionar suporte a um plug-in.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<name>my-app</name>
<!-- IMPORTANTE troque este endereço pelo do site do projeto -->
<url>http://www.exemplo.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- faça o lockdown das versões dos plug-ins para evitar o uso dos padrões do Maven (pode ser movido para o pom pai) -->
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Ciclo de vida limpo; consulte https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle (em inglês) -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- Ciclo de vida padrão, empacotamento em jar; consulte https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging (em inglês) -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- Ciclo de vida do site; consulte https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle (em inglês) -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Abra o terminal no VSCode e execute
mvn install
mvn clean jacoco:prepare-agent install jacoco:report
Abra seu arquivo App.java
na pasta main/java/com/mycompany/app
e clique no botão Watch para verificar o relatório
Barra vermelha: código de teste não coberto
Barra amarela: condição não coberta
Barra verde: código coberto
Abra o arquivo index.html
na sua pasta root/target/site/jacoco
.
Para abrir:
Eme seguida, cole (Ctrl + V para Windows e Command + V para MacOS) o caminho no seu navegador.
Você pode ver um relatório de cobertura de teste muito detalhado:
Obrigado pela leitura! 😉