Introdução a Testes em Java
Maria Milusheva
Senior Software Engineer
Dois conceitos-chave:
Unidade - a menor parte testável de um aplicativo, como um método
Teste de unidade - Teste que verifica a correção de uma única "unidade" de código isolada do resto do aplicativo
Observações:
Teste de unidade trata de pequenos trechos de lógica, não do panorama geral
Outros tipos de teste focam no panorama geral (ex.: integração)
JUnit tem esse nome porque seu principal uso é teste de unidade



assertTrue() verifica se uma afirmação é verdadeira: List<String> list = new ArrayList<>();
assertTrue(list.isEmpty()); // Sem erro
assertFalse() verifica o oposto:List<String> list = new ArrayList<>();
list.add("A");
assertFalse(list.isEmpty()); // Sem erro
Variáveis null podem gerar NullPointerException!
Asserções que checam se uma variável é ou não null - assertNull() e assertNotNull()
Caso comum: verificar se um valor obtido de algum lugar não é null
Map<String, Integer> catalogue = new HashMap<>();
catalogue.put("item1", 10);
// Sem erros
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Suponha que queremos verificar se uma ArrayIndexOutOfBoundsException é lançada:
public String getIndex(String[] array, int index) {
return array[index];
}
O JUnit oferece várias formas de fazer isso!
O JUnit oferece assertThrows(), mas ele usa sintaxe Java avançada (expressões lambda)
Dá para usar assertInstanceOf() assim:
try {
getIndex(new String[]{}, 4);
} catch (Exception e) {
// Passe a classe esperada da exceção e a própria exceção
assertInstanceOf(ArrayIndexOutOfBoundsException.class, e);
}
Um projeto típico contém centenas de testes de unidade
Eles devem ser leves e fáceis de entender
Devem ter nomes informativos para identificarmos de imediato o que falhou se algum quebrar
Por exemplo: methodUnderTest_expectedBehavior_conditions()
Introdução a Testes em Java