Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como fazer os testes unitários de anotações e do @ControllerAdvice??

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

1 resposta
solução!

Oi Ronald,

O ideal é testar ambos os casos via testes de Controller mesmo, pois os controllers é que "chamam" tanto a parte de validação quanto a parte de exception handler.