https://github.com/lsmcodes/junit-testes-unitarios
Resolução de exercício inspirado nos exercícios apresentados durante o curso "Testes Unitários com JUnit" - DIO
https://github.com/lsmcodes/junit-testes-unitarios
exercises junit5 santander-bootcamp-2024
Last synced: over 1 year ago
JSON representation
Resolução de exercício inspirado nos exercícios apresentados durante o curso "Testes Unitários com JUnit" - DIO
- Host: GitHub
- URL: https://github.com/lsmcodes/junit-testes-unitarios
- Owner: lsmcodes
- Created: 2024-06-17T01:51:54.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-07-05T01:27:53.000Z (about 2 years ago)
- Last Synced: 2025-01-29T19:48:33.426Z (over 1 year ago)
- Topics: exercises, junit5, santander-bootcamp-2024
- Language: Java
- Homepage: http://www.dio.me
- Size: 13.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# DIO - Trilha Testes e Gerenciamento de Dependências Java
## Repositório Original do Curso
- [JUnit 5 Exemplos](https://github.com/willyancaetano/junit5-exemplos)
## JUnit 5
`JUnit 5` é a geração atual do framework de testes JUnit, que provê uma base moderna para `testes` do lado de desenvolvedor na JVM (Java Virtual Machine).
## Exercícios
Este repositório contém um exercício que exemplifica a utilização do JUnit 5 e que cobre os seguintes temas:
- Before e After
- Assumptions e testes condicionais
- Testando Exceptions
- Ordenação de testes
## Configurar JUnit 5
Para utilizar o JUnit, adicione a dependência JUnit Jupiter Engine ao arquivo `pom.xml` ou ao `build.gradle` do seu projeto.
### Maven
```xml
org.junit.jupiter
junit-jupiter-engine
5.10.2
test
```
### Gradle
```groovy
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.2'
```
## Escrevendo Testes
No exemplo a seguir há uma visão geral dos requerimentos básicos para o desenvolvimento de um teste.
```java
import static org.junit.jupiter.api.Assertions.assertEquals;
import io.github.lsmcodes.junit.Conversor;
import org.junit.jupiter.api.Test;
class ConversorTestes {
@Test
void converterCelsiusParaFahrenheit_DeveConverterCorretamente_QuandoReceberValorValido() {
// Arrange (arranjar)
Conversor conversor = new Conversor();
double fahrenheit = 74.3;
double celsius = 23.5;
// Act (agir)
double celsiusParaFahrenheit = conversor.converterCelsiusParaFahrenheit(celsius);
// Assert (afirmar)
assertEquals(fahrenheit, celsiusParaFahrenheit);
}
}
```
## Anotações
A seguir estão as anotações utilizadas no exercício e suas respectivas descrições.
| Anotação | Descrição |
|--------------------|-------------------------------------------------------------------------|
| `@Test` | Denota que o método anotado é um método de teste |
| `@TestMethodOrder` | Define a ordem de execução dos métodos da classe anotada |
| `@DisplayName` | Declara um nome customizado para a classe ou o método de teste |
| `@BeforeEach` | O método anotado deve ser executado antes de cada @Test |
| `@AfterEach` | O método anotado deve ser executado depois de cada @Test |
| `@BeforeAll` | O método anotado deve ser executado antes de todos os métodos de teste |
| `@AfterAll` | O método anotado deve ser executado depois de todos os métodos de teste |
## Boas Práticas
### Código-fonte
É uma boa prática manter as classes de teste separadas do código principal. Então os testes são desenvolvidos, executados e mantidos separadamente do código de produção. As implementações de testes são normalmente feitas em `src/test`.
### Convenções de Nomenclatura de Packages
O package da classe de teste deve ser o mesmo da classe original da qual as unidades estão sendo testadas. Por exemplo, no exercício contido no presente repositório há a classe `Conversor` no package `src/main/java/io/github/lsmcodes/junit`, a classe de teste que vai testar as unidades dessa classe deve estar no package `src/test/java/io/github/lsmcodes/junit`.
### Convenções de Nomenclatura de Casos de Testes
Os nomes dos casos de testes devem ser descritivos de forma que seja possível compreender qual é o comportamento do teste pelo seu nome. Por exemplo, se há um método `converterCelsiusParaFahrenheit(double celsius)` o caso de teste pode ter um nome como `converterCelsiusParaFahrenheit_DeveLancarExcecao_QuandoReceberValorInvalido()`.
### 80% de Cobertura de Testes
Quanto mais cobertura de testes para o código-fonte, melhor. Mas como regra geral o ideal é alcançar a cobertura de pelo menos `80% do código` com testes unitários. Adicionalmente, é possível utilizar ferramentas como `JaCoCo` e `Cobertura` junto com Maven ou Gradle para gerar relatórios de cobertura de código.
## Referências
- JUnit 5 - https://junit.org/junit5/
- JUnit 5 User Guide - https://junit.org/junit5/docs/current/user-guide/
- Best Practices for Unit Testing - https://www.baeldung.com/java-unit-testing-best-practices