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

Poderíamos criar um JSON do array de abrigos ao invés de utilizar o toString?

Por que não gerar JSON (ObjectMapper) no teste em vez de usar toString() do array de abrigos?

@Test
    public void deveVerificarSeDispararRequisicaoGetSeraChamada() throws IOException, InterruptedException {
        abrigo.setId(0L);

        // Gera um JSON do array de abrigos
        String json = new ObjectMapper().writeValueAsString(new Abrigo[]{ abrigo });
        
        String expectedAbrigosCadastrados = "Abrigos cadastrados:";
        String expectedIdENome = "0 - Teste";

        // Captura stdout
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PrintStream printStream = new PrintStream(baos);
        System.setOut(printStream);

        when(response.body()).thenReturn(json);
        when(client.dispararRequisicaoGet(anyString())).thenReturn(response);

        abrigoService.listarAbrigos();

        String[] lines = baos.toString().split(System.lineSeparator());
        String actualAbrigosCadastrados = lines[0];
        String actualIdENome = lines[1];

        Assertions.assertEquals(expectedAbrigosCadastrados, actualAbrigosCadastrados);
        Assertions.assertEquals(expectedIdENome, actualIdENome);
    }
}
1 resposta
solução!

Olá, Alexandre! Como vai?

A escolha entre usar toString() e gerar um JSON com ObjectMapper depende do que você está tentando alcançar no seu teste.

Utilizar o ObjectMapper para converter o objeto em JSON pode ser mais vantajoso se você deseja simular um cenário mais próximo do mundo real, onde as respostas de uma API geralmente são em formato JSON. Isso pode ajudar a garantir que seu código lide corretamente com a conversão de JSON para objetos Java, especialmente se você estiver usando bibliotecas como Jackson para desserializar as respostas das APIs.

No seu teste, ao usar ObjectMapper().writeValueAsString(new Abrigo[]{ abrigo }), você está criando uma representação JSON realista do seu objeto Abrigo. Isso pode ajudar a identificar problemas que poderiam passar despercebidos se você estivesse apenas usando toString(), que não necessariamente segue o formato JSON.

Por outro lado, sobrescrever o método toString() para retornar uma string formatada como JSON pode ser uma solução rápida para testes unitários onde o foco não está na conversão JSON, mas sim em verificar outros aspectos do comportamento do método.

Se o objetivo do teste é verificar a lógica de manipulação dos dados após a desserialização, usar o ObjectMapper pode ser mais adequado. No entanto, se o foco é apenas garantir que a lógica interna do método está correta, a abordagem com toString() pode ser suficiente.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.