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

[Dúvida] Como tratar o erro IllegalAccessException no teste Teste shouldTransform

Ao implementarmos o teste Teste shouldTransform proposto, ele passa com sucesso, mas, no console é informado que foi lançado uma exception do tipo IllegalAccessException.

Isso também é demonstrado no vídeo do curso, mas, não é tratado.

Gostaria de saber como posso fazer para que essa exception seja tratada e não mais exibida no console quando esse teste for executado com sucesso.

Segue minha implementação do teste abaixo:

class TransformatorTest {

    Pessoa pessoa = new Pessoa(32, "João", "04333958210");
    Endereco endereco = new Endereco("Rua 10", 20);

    @Test
    void shouldTransform() throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException,
          InstantiationException, IllegalAccessException {

        Transformator transformator = new Transformator();
        PessoaDTO pessoaDTO = transformator.transform(pessoa);

        assertNotNull(pessoaDTO);
        assertInstanceOf(PessoaDTO.class, pessoaDTO);
        assertAll(
              "Deve validar todos os atributos",
              () -> assertEquals(pessoa.getNome(), pessoaDTO.getNome()),
              () -> assertEquals(pessoa.getCpf(), pessoaDTO.getCpf())
        );

    }

    @Test
    void shouldNotTransform() {
        assertThrows(ClassNotFoundException.class, () ->  {
            Transformator transformator = new Transformator();
            transformator.transform(endereco);
        });
    }
}
1 resposta
solução!

Olá, Renato.

Tudo bem?

Entendo sua preocupação em querer tratar a IllegalAccessException para que ela não apareça mais no console durante a execução do teste shouldTransform. Isso realmente pode tornar os resultados dos testes mais claros e limpos.

Uma maneira eficaz de lidar com isso é capturar e tratar a exceção diretamente no método de teste ou em um método auxiliar. Como você já está declarando que o método shouldTransform pode lançar uma IllegalAccessException, você pode optar por envolver o código que pode lançar essa exceção em um bloco try-catch. Isso permitirá que você trate a exceção de maneira adequada, seja apenas registrando-a ou tomando alguma medida corretiva.

Aqui está um exemplo de como você poderia modificar seu teste para tratar essa exceção:

class TransformatorTest {

    Pessoa pessoa = new Pessoa(32, "João", "04333958210");
    Endereco endereco = new Endereco("Rua 10", 20);

    @Test
    void shouldTransform() {
        try {
            Transformator transformator = new Transformator();
            PessoaDTO pessoaDTO = transformator.transform(pessoa);

            assertNotNull(pessoaDTO);
            assertInstanceOf(PessoaDTO.class, pessoaDTO);
            assertAll(
                  "Deve validar todos os atributos",
                  () -> assertEquals(pessoa.getNome(), pessoaDTO.getNome()),
                  () -> assertEquals(pessoa.getCpf(), pessoaDTO.getCpf())
            );
        } catch (IllegalAccessException e) {
            fail("IllegalAccessException should not be thrown");
        } catch (Exception e) {
            fail("Unexpected exception thrown: " + e.getClass().getName());
        }
    }

    @Test
    void shouldNotTransform() {
        assertThrows(ClassNotFoundException.class, () ->  {
            Transformator transformator = new Transformator();
            transformator.transform(endereco);
        });
    }
}

Neste exemplo, eu envolvi o corpo do teste shouldTransform em um bloco try-catch. Se uma IllegalAccessException for lançada, o teste irá falhar especificamente por essa razão. Isso ajuda a garantir que o teste só passe se não ocorrerem exceções não tratadas e que o comportamento esperado seja alcançado.

Espero que essa abordagem ajude a resolver o problema com a exceção e torne seus testes mais robustos e claros. Qualquer dúvida manda aqui. Bons estudos.