Um bom teste unitário (aplicado com JUNIT) é aquele em que testamos um cenário positivo e outro negativo.
Como posso identificar o negativo?
Por exemplo, um método chamado find que retorne todos os cursos de um Sistema Acadêmico. Este método find trabalha da seguinte forma: se não for passado parâmetros retorna todos os cursos e se for passado parâmetro é feito um filtro e retorna os cursos de acordo com estes parâmtros.
Como identificar o cenário negativo nestas situações?
Testes unitários servem somente para confirmar um resultado (o caso positivo), e não para testar todas as alternativas de uma mesma entrada (o caso negativo), coisa que não existe. Softwares tem comportamento determinístico, não adianta procurar por outro comportamento que você não programou.
Quanto a como testar o find, normalmente é feito comparando o número de itens na coleção retornada, lembrando que você deve ter controle total sobre os itens na tua base de dados de testes.
Devemos sim pensar em cenários negativos onde forçaremos o erro aparecer.
Por exemplo, um campo nome do tipo String com tamanho máximo de 50. Ao aplicarmos o particionamento por equivalência e a análise por valor limite, poderemos criar as seguintes classes de testes.
Particionamento por Equivalência: campo nome:
* valor em branco: Cenário Negativo
* valor > 50: Cenário Negativo
* qualquer valor de 1 a 50: Cenário Positivo
Análise por Valor Limite:
Campo nome: valor em branco; valores 49,50,51; Usamos um valor exatamente inferior e extamente posterior ao valor do campo, devido ao fato dos erros aparecerem nas fronteiras da aplicação.
Fiquei com dúvida mesmo como achar um cenário negativo para um método do tipo find (pesquisar).
retornar o número exato de resultados para algum parâmetro conhecido passado.
não retornar nenhum resultado qdo passado algum parâmetro conhecido que não tenha “registros” vinculados.
Parâmetro conhecido é quando tu passas algo e sabe o valor exato que deve ser retornado, ou seja, tenha controle sobre sua base de teste como disse o Bruno.
Eu tinha considerado esses cenários de erros também como Cenários Positivos, pois você também esperando que os testes dêem positivo/verde. Por isso que achei estranho em codificar Cenários Negativos, pois os testes não deveriam dar negativo/vermelho.
Um cenário negativo para métodos de pesquisa poder ser um onde o parâmetro não é permitido, ou seja, existe uma lógica de negócio acoplada à pesquisa. Um caso que pode ser útil é economizar antes mandar queries desnecessárias e muito caras para o banco. Por outro lado, não é muito legal misturar lógica de validação em classes de acesso a banco, mas pode ser outro tipo de inteligência.
Um caso de teste genérico de integração(não unitário) que podes tentar é ver como o sistema se comporta quando um subsistema (banco de dados) fica fora do ar, fica corrompido, etc. Aí entra falha graciosa, log de erros, envio de alertas para o administrador…