4
respostas

[Bug] Erro no Spring Security

10:04:54.200 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [med.voll.apimed.controller.MedicoControllerTest]: MedicoControllerTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
10:04:54.423 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration med.voll.apimed.ApimedApplication for test class med.voll.apimed.controller.MedicoControllerTest
10:04:54.687 [main] INFO org.springframework.boot.devtools.restart.RestartApplicationListener -- Restart disabled due to context in which it is running
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@155767a7 testClass = med.voll.apimed.controller.MedicoControllerTest, locations = [], classes = [med.voll.apimed.ApimedApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [[ImportsContextCustomizer@5418a659 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@15bb5034, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2cf3d63b, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@74e28667, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@79e4c792, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@353352b6, org.springframework.boot.test.context.SpringBootTestAnnotation@c1aac726], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]

Minha Classe de Teste

package med.voll.apimed.controller;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpStatus;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;

import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;

@SpringBootTest
@AutoConfigureMockMvc
public class MedicoControllerTest {
    @Autowired
    MockMvc mvc;

    @Test
    @DisplayName("Devolve código http 400 quando informações inválidas")
    @WithMockUser
    void agendar_cenario1() throws Exception {
       var response = mvc.perform(post("/consultas"))
                        .andReturn()
                        .getResponse();

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

}
4 respostas

Olá, Arthur!

Parece que você está enfrentando um problema ao carregar o contexto da aplicação durante o teste do seu controller. Vamos tentar resolver isso juntos!

Primeiramente, o erro que você está recebendo indica que o Spring não conseguiu carregar o ApplicationContext. Isso pode ocorrer por diversos motivos, mas vamos focar nos mais comuns.

Verifique a Estrutura do Projeto

Certifique-se de que a estrutura do seu projeto está correta e que a classe ApimedApplication está na raiz do seu pacote base. O Spring Boot usa a classe principal da aplicação para iniciar o contexto.

Adicione a Dependência do Spring Security Test

Se você ainda não adicionou a dependência do Spring Security Test, adicione-a ao seu pom.xml:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <scope>test</scope>
</dependency>

Considerações Finais

  • Verifique se há outros erros no log: Às vezes, o erro principal pode ser precedido por outros erros que fornecem mais contexto.

Espero ter ajudado e bons estudos!

Ainda não consegui encontrar o problema, mas se o problema estivesse na estrutura do projeto, ele não deveria funcionar certo ? mas só estou tendo erro na minha classe de teste, no postman funciona tudo normal

Pode compartilhar seu projeto?

claro ! https://github.com/Arthurandradens/APImed.git