- Published on
Testes parametrizados com Junit 5
- Authors
- Name
- Cezar Cruz
- @cezar_
Com a versão mais recente do Junit ficou muito simples de fazer testes "parametrizados", onde, com apenas um método, é possível fazer testes em vários cenários.
Neste post vamos ver dois cenários:
Inicialmente a dependência do Junit em seu projeto deve estar assim:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
Com a dependência correta, o nosso primeiro teste já pode ser escrito:
@ParameterizedTest
@CsvSource({
"AAA,AAA",
"ALL,ALL",
"VMM,VMM"
})
public void deveChecarValor(final String input, final String expected) {
assertEquals(expected, input);
}
- @CsvSource recebe um array de valores em formato "CSV".
- Repare que nosso teste é anotado com @ParameterizedTest.
- O método tem duas entradas que representam os valores separados por ",".
- Também é possível fazer o teste usando um arquivo ".csv"
- @CsvFileSource(resources = "arquivo.csv", numLinesToSkip = 1)
- resouces: é o nome do arquivo
- numLinesToSkip: arquivos csv iniciando com o cabeçalho na primeira linha, se esse for o caso, esse parâmetro diz para pular a primeira linha, ou o número de linhas passado como valor.
- @CsvFileSource(resources = "arquivo.csv", numLinesToSkip = 1)
O método é executado 3 vezes, cada uma passando os valores por linhas, e caso tenha algum erro em um dos cenários, o Junit mostra qual deles deu erro:
@ParameterizedTest
@CsvSource({
"AAA,AAA",
"ALL,AYY",
"VMM,VMM"
})
public void deveChecarValor(final String input, final String expected) {
assertEquals(expected, input);
}
Resultado:
org.opentest4j.AssertionFailedError:
Expected :AYY
Actual :ALL
A outra interface que podemos utilizar é a @ValueSource:
@ParameterizedTest
@ValueSource(ints = {
2,
4,
6
})
public void numerosPares(final Integer input) {
assertEquals(0, input % 2);
}
- @ValueSource recebe o tipo e um array com os valores
- Os tipos podem ser:
- ints
- strings
- booleans
- byte
- char
- double
- short
- etc....
- Os tipos podem ser:
A ideia é a mesma do @CsvSource mas recebendo apenas um valor.