2
respostas

Como testar os demais métodos HTTP?

Olá!

Nesse curso só foi mostrado como testar o método POST do controller, e também, só foi feito a assertiva do status retornado. Mas e quanto ao teste para verificar se o conteúdo retornado está correto? Ou testes que cobrem outros cenários? E o teste dos demais métodos? De fato a forma de testar controller é bem diferente das demais classes, então não consegui testar os outros métodos apenas com o conteúdo aprendido nesse módulo.

Há algum outro curso, mais completo, que aborde isso? Ou alguma referencia da Alura?

2 respostas

Dando continuidade no curso vi que no módulo de desafios é falado um pouco mais sobre controllers. Mas ainda assim, não há uma explicação mais detalhada de como testar diversos cenários, incluindo outros métodos HTTP, como o DELETE e o PUT.

Olá, Francisco!

Neste curso, o foco foi em testes de unidade para o método POST do controller. Para os demais métodos HTTP (GET, PUT, DELETE, etc.), a lógica é similar. Vou te dar um exemplo de como você poderia testar um método GET:

@Test
public void deveriaRetornar200ParaGet() throws Exception {
    //ARRANGE
    Long id = 1L;

    //ACT
    var response = mvc.perform(
            get("/adocoes/" + id)
                    .contentType(MediaType.APPLICATION_JSON)
    ).andReturn().getResponse();

    //ASSERT
    Assertions.assertEquals(200, response.getStatus());
}

Neste exemplo, estamos testando um método GET que busca uma adoção pelo seu ID. A lógica é bem similar ao teste do POST que foi feito no curso, mas agora estamos usando o método get() do MockMvc e passando a URL do recurso que queremos buscar.

Quanto à verificação do conteúdo retornado, você pode utilizar o método getContentAsString() do objeto response, como mencionado na aula. Com ele, você consegue obter o conteúdo retornado pela requisição em forma de String. Você pode então comparar essa String com o conteúdo esperado. Veja um exemplo:

@Test
public void deveriaRetornarConteudoCorretoParaGet() throws Exception {
    //ARRANGE
    Long id = 1L;
    String conteudoEsperado = "{ \"id\": 1, \"nome\": \"Nome do Pet\", ... }"; // preencha com o conteúdo esperado

    //ACT
    var response = mvc.perform(
            get("/adocoes/" + id)
                    .contentType(MediaType.APPLICATION_JSON)
    ).andReturn().getResponse();

    //ASSERT
    Assertions.assertEquals(conteudoEsperado, response.getContentAsString());
}

Neste exemplo, estamos verificando se o conteúdo retornado pela requisição GET é o esperado.

Quanto a cursos mais completos, a Alura tem uma formação completa de Spring que aborda testes de unidade, testes de integração e TDD. Recomendo dar uma olhada!

Espero ter ajudado e bons estudos!