2
respostas

[Dúvida] java: 'void' type not allowed here

package med.voll.api.controller;

import med.voll.api.domain.consulta.AgendaDeConsultas; import med.voll.api.domain.consulta.DadosAgendamentoConsulta; import med.voll.api.domain.consulta.DadosDetalhamentoConsulta; import med.voll.api.domain.medico.Especialidade; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.mockito.stubbing.OngoingStubbing; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.json.AutoConfigureJsonTesters; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.json.JacksonTester; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.web.servlet.MockMvc;

import java.time.LocalDateTime;

import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;

@SpringBootTest @AutoConfigureMockMvc @AutoConfigureJsonTesters class ConsultaControllerTest { @Autowired private MockMvc mvc;

@Autowired
private JacksonTester<DadosAgendamentoConsulta> dadosAgendamentoConsultaJson;

@Autowired
private JacksonTester<DadosDetalhamentoConsulta> dadosDetalhamentoConsultaJson;

@MockBean
private AgendaDeConsultas agendaDeConsultas;
@Test
@DisplayName("Deveria devolver codigo http 400 quando informacoes estao invalidos")
@WithMockUser
void agendar_cenario1() throws Exception {
    var response = mvc.perform(post("/consultas"))
            .andReturn().getResponse();

    assertThat(response.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());
}

@Test
@DisplayName("Deveria devolver codigo http 200 quando informacoes estao validas")
@WithMockUser
void agendar_cenario2() throws Exception {
    var data = LocalDateTime.now().plusHours(1);
    var especialidade = Especialidade.CARDIOLOGIA;
    var dadosDetalhamento = new DadosDetalhamentoConsulta(null,2l,5l,data);

    when(agendaDeConsultas.agendar(any())).thenReturn(dadosDetalhamento);

    var response = mvc
            .perform(
                    post("/consultas")
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(dadosAgendamentoConsultaJson.write(
                                    new DadosAgendamentoConsulta(2l, 5l, data, especialidade)
                            ).getJson())
            )
            .andReturn().getResponse();

    assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
            var jsonEsperado = dadosDetalhamentoConsultaJson.write(
            dadosDetalhamento
            ).getJson();

    assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);
}

} Insira aqui a descrição dessa imagem para ajudar na acessibilidadeEstou tentando realizar o teste, porém está dando como tipo void não é permitido aqui. Poderia orientar nesse caso?

2 respostas

O erro "void type not allowed here" em Java geralmente ocorre quando você tenta usar um método ou função que retorna void como valor de retorno em uma expressão ou atribuição.

No código fornecido, o erro pode estar ocorrendo porque o método assertThat da biblioteca AssertJ retorna void. Isso significa que você não pode usá-lo como um valor em uma expressão.

Para corrigir o erro, você pode dividir a chamada ao método assertThat em duas etapas: primeiro, chame o método assertThat e, em seguida, chame o método apropriado para verificar a condição desejada.

Por exemplo, em vez de:

assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());

Você pode fazer:

assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);

Isso deve corrigir o erro "void type not allowed here".

'when(T)' in 'org.mockito.Mockito' cannot be applied to '(void)' Ele está retornando essa crítica. A linha 61 : when(agendaDeConsultas.agendar(any())).thenReturn(dadosDetalhamento);

Provavelmete alguma regra do mockito