Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Testes Enum

Bom, não sei se é por aqui, mas eu tenho uma dúvida para testar o método abaixo, depois que eu criei e validei para os Enum Java que eu criei para a minha aplicação, que estão funcionando. O problema é que não estou conseguindo fazer a cobertura desse trecho. Poderiam me ajudar, como eu poderia fazer? Insira aqui a descrição dessa imagem para ajudar na acessibilidade

package com.plano.saude.cadastro.domain.consulta;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class MotivoCancelamentoTest {

    @Test
    @DisplayName("Testes positivos e negativos dos enums declarados")
    public void should(){
        assertNotNull(MotivoCancelamento.BENEFICIARIO_DESISTIU);
        assertNotNull(MotivoCancelamento.valueOf("BENEFICIARIO_DESISTIU"));
        assertEquals("BENEFICIARIO_DESISTIU", MotivoCancelamento.BENEFICIARIO_DESISTIU.name());
        assertNotEquals("DESISTIU", MotivoCancelamento.BENEFICIARIO_DESISTIU.name());
        
        assertNotNull(MotivoCancelamento.MEDICO_CANCELOU);
        assertNotNull(MotivoCancelamento.valueOf("MEDICO_CANCELOU"));
        assertEquals("MEDICO_CANCELOU", MotivoCancelamento.MEDICO_CANCELOU.name());
        assertNotEquals("CANCELADO", MotivoCancelamento.MEDICO_CANCELOU.name());

        assertNotNull(MotivoCancelamento.OUTROS);
        assertNotNull(MotivoCancelamento.valueOf("OUTROS"));
        assertEquals("OUTROS", MotivoCancelamento.OUTROS.name());
        assertNotEquals("OUTRA_COISA", MotivoCancelamento.OUTROS.name());
    }
}
2 respostas
solução!

Olá Alexandre!

Para garantir a cobertura completa desse método em seus testes, você precisa incluir casos que testem tanto os cenários de sucesso (onde a string é válida e corresponde a um valor do enum) quanto os cenários de falha (onde a string não corresponde a nenhum valor do enum e uma exceção é lançada).

Aqui está um exemplo de como você pode estruturar esses testes utilizando JUnit:

package com.plano.saude.cadastro.domain.consulta;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class MotivoCancelamentoTest {

    @Test
    @DisplayName("Conversão de String para Enum com sucesso")
    public void testFromStringSuccess() {
        assertEquals(MotivoCancelamento.BENEFICIARIO_DESISTIU, MotivoCancelamento.fromString("BENEFICIARIO_DESISTIU"));
        assertEquals(MotivoCancelamento.MEDICO_CANCELOU, MotivoCancelamento.fromString("MEDICO_CANCELOU"));
        assertEquals(MotivoCancelamento.OUTROS, MotivoCancelamento.fromString("OUTROS"));
    }

    @Test
    @DisplayName("Conversão de String para Enum com falha")
    public void testFromStringFailure() {
        assertThrows(IllegalArgumentException.class, () -> MotivoCancelamento.fromString("INEXISTENTE"));
    }
}

Neste exemplo, o método testFromStringSuccess verifica se a conversão de strings válidas para o enum é bem-sucedida, enquanto o método testFromStringFailure verifica se uma IllegalArgumentException é lançada quando uma string que não corresponde a nenhum valor do enum é usada.

Isso deve ajudar a aumentar a cobertura dos testes para o método fromString e garantir que ambos os comportamentos esperados (sucesso e falha) sejam verificados.

Espero ter ajudado e bons estudos!

Oi, professor! Entendi. Além de montar os cenários, podem retornar resultados de forma mais precisa e direta, conforme esperado. Depois que mostrou o cenário de erro, pude perceber o tratamento que precisa ser feito. Obrigado mais uma vez!