Ola pessoal, estou fazendo os testes unitários de um projeto pessoal https://github.com/RonyLiboni/Ingresso-Facil-API , consegui testar as services, os repositórios e as controllers. porém falta testar unitariamente os dois itens abaixo, que n faco ideia de como testar 1) as anotacoes de validação (exemplo: as classes "Form" tem anotações @NotBlank, @Future, @NotNull e tem algumas anotações de validacao que criei também). Exemplo:
//Assim é no controller
@PostMapping
@ApiOperation(value = "Cria um novo local")
public ResponseEntity<LocalDto> cadastrar(@RequestBody @Valid LocalForm form) {
return ResponseEntity.status(HttpStatus.CREATED).body(new LocalDto(localService.cadastrar(form)));
}
//assim é a Dto/Form
public class LocalForm {
@NotBlank (message = "{obrigatorio.nome}")
@NomeDeLocalUnico
@ApiModelProperty(example = "Theatro Municipal de São Paulo", position = 0)
private String nome;
@NotBlank (message = "{obrigatorio.endereco}")
@ApiModelProperty(example = "Praça Ramos de Azevedo, s/n - República, São Paulo - SP, 01037-010", position = 1)
private String endereco;
}
Antes de realmente iniciar o método da controller o Spring verifica o @NotBlank, @NomeDeLocalUnico... para validar o LocalForm. Nao entendi como testar essa validacao unitariamente. Sem ter que levantar todo contexto do spring para esse teste.
2) @ControllerAdvice -> nao sei como simular uma exception para a classe identificar e mudar o status code. imagino que testar somente chamando o método nao seja a forma correta, pois apesar de validar a lógica de dentro do método, acho que preciso testar o @ExceptionHandler(...) que seria uma etapa anterior do programa sendo direcionado para esse metodo. Ex: qndo o Id passado de parametro nao existe é lancada a IdNotFoundException, apos isso o spring direciona para a @controllerAdvice que procura p @ExceptionHandler(IdNotFoundException.class) e ai sim entra no metodo especifico para essa exception
@ExceptionHandler(IdNotFoundException.class)
public ResponseEntity<String> idNaoExiste(IdNotFoundException exception) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(exception.getMessage());
}
controllerAdvice captura sempre que o sistema lança "IdNotFoundException" e executa o metodo. testar o metodo direto eu sei, mas n sei como que faço esse teste unitario da parte de captura da exception lancada. ou isso é algo que nao precisamos testar?
abraço