Oi galera!, meu teste do forum web está com algum problema, na hora de testar a controller, ele está tentando inserir dados no banco de dados real, como faço para evitar isso?, segue a classe e o log:
@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureJsonTesters
class RespostaControllerTest {
@Autowired
private MockMvc mvc;
@Autowired
private JacksonTester<DadosCadastroRespostas> dadosCadastroRespostasJt;
@Autowired
private JacksonTester<DadosDetalhamentoResposta> dadosDetalhamentoRespostaJt;
@MockBean
private ValidarExistenciaTopico vet;
@MockBean
private ValidarUsuarioResposta vur;
@Test
@DisplayName("POST de respostas sem corpo na requisição deveria retornar BAD_REQUEST")
@WithMockUser
void cadastrarRespostaCenarioUm() throws Exception {
var response = mvc.perform(post("/respostas"))
.andReturn().getResponse();
assertEquals(HttpStatus.BAD_REQUEST.value(), response.getStatus());
}
@Test
@DisplayName("POST de respostas válidas deve retornar OK")
@WithMockUser
void cadastrarRespostaCenarioDois() throws Exception {
var data = LocalDateTime.now().plusHours(2);
var dados = new DadosCadastroRespostas("Testando", 1L, 1L, data, "Essa é a solução");
doNothing().when(vet).validar(any());
doNothing().when(vur).validar(any());
var response = mvc.perform(
post("/respostas")
.contentType(MediaType.APPLICATION_JSON)
.content(dadosCadastroRespostasJt.write(dados).getJson()))
.andReturn().getResponse();
var jsonEsperado = dadosDetalhamentoRespostaJt.write(
new DadosDetalhamentoResposta(null, "Testando", data, "Essa é a solução", 1L)).getJson();
assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);
assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
}
}
", "%TESTC 1 v2
%TSTTREE2,com.api.forumweb.app.controller.RespostaControllerTest,true,1,false,1,RespostaControllerTest,,[engine:junit-jupiter]/[class:com.api.forumweb.app.controller.RespostaControllerTest]
%TSTTREE3,cadastrarRespostaCenarioDois(com.api.forumweb.app.controller.RespostaControllerTest),false,1,false,2,POST de respostas válidas deve retornar OK,,[engine:junit-jupiter]/[class:com.api.forumweb.app.controller.RespostaControllerTest]/[method:cadastrarRespostaCenarioDois()]
%TESTS 3,cadastrarRespostaCenarioDois(com.api.forumweb.app.controller.RespostaControllerTest)
%FAILED 3,cadastrarRespostaCenarioDois(com.api.forumweb.app.controller.RespostaControllerTest)
%EXPECTS
"{"id":null,"mensagem":"Testando","dataCriacao":"2024-07-10T18:10:14.3738766","solucao":"Essa é a solução","idUsuario":1}"
%EXPECTE
%ACTUALS
"could not execute statement [Cannot add or update a child row: a foreign key constraint fails (`artmantel_forum_db`.`respostas`, CONSTRAINT `respostas_ibfk_1` FOREIGN KEY (`id_topico`) REFERENCES `topicos` (`id`))] [insert into respostas (data_criacao,mensagem,solucao,id_topico,id_usuario) values (?,?,?,?,?)]; SQL [insert into respostas (data_criacao,mensagem,solucao,id_topico,id_usuario) values (?,?,?,?,?)]; constraint [null]"
%ACTUALE
%TRACES
org.opentest4j.AssertionFailedError:
expected: "{"id":null,"mensagem":"Testando","dataCriacao":"2024-07-10T18:10:14.3738766","solucao":"Essa é a solução","idUsuario":1}"
but was: "could not execute statement [Cannot add or update a child row: a foreign key constraint fails (`artmantel_forum_db`.`respostas`, CONSTRAINT `respostas_ibfk_1` FOREIGN KEY (`id_topico`) REFERENCES `topicos` (`id`))] [insert into respostas (data_criacao,mensagem,solucao,id_topico,id_usuario) values (?,?,?,?,?)]; SQL [insert into respostas (data_criacao,mensagem,solucao,id_topico,id_usuario) values (?,?,?,?,?)]; constraint [null]"
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at com.api.forumweb.app.controller.RespostaControllerTest.cadastrarRespostaCenarioDois(RespostaControllerTest.java:80)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
%TRACEE
%TESTE 3,cadastrarRespostaCenarioDois(com.api.forumweb.app.controller.RespostaControllerTest)
%RUNTIME33644"