Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro no AutenticacaoController

Sei que esse erro ja apareceu em forums anteriores porem apos seguir recomendações esse problema havia desaparecido, mas quando implementei o AutenticacaoControllerTest ele voltou ja testei em outras classes de test e o erro não aparece ele so aparece nessa classe

***************************
APPLICATION FAILED TO START
***************************

Description:

Field authManager in br.com.alura.forum.controller.AutenticacaoController required a bean of type 'org.springframework.security.authentication.AuthenticationManager' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'org.springframework.security.authentication.AuthenticationManager' in your configuration.
3 respostas

Codigo da classe AutenticacaoControllerTest:


@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureTestDatabase(replace = Replace.NONE)
@ActiveProfiles("test")
public class AutenticacaoControllerTest {

    @Autowired
    private MockMvc mockMvc;


    @Test
    public void deveriaDevolver400CasoDadosDeAutenticacaoEstejamIncorretos() throws Exception {
        URI uri = new URI("/auth");

        String json = "{\"email\"=\"invalido@email.com\", \"senha\"=\"tantofaz\"}";

        mockMvc
        .perform(MockMvcRequestBuilders
                .post(uri)
                .content(json)
                .contentType(MediaType.APPLICATION_JSON))
        .andExpect(MockMvcResultMatchers
                .status()
                .is(400));


    }

}

ja tentei colocar conforme a recomendação o required=true tanto nessa classe de test quanto na classo mesmo do controlador e não resolveu

solução!

Oi Joao,

O problema é que você está testando a classe AutenticacaoController, na qual é injetado o atributo authManager, sendo que esse objeto tivemos que criar um metodo anotado com @Bean na classe SecurityConfigurations para conseguir o injetar no controller.

Mas a classe SecurityConfigurations está anotada com @Profile("prod"), ou seja, somente será carregada se o profile da aplicação for prod.

Mas na sua classe de teste você anotou com @ActiveProfiles("test") e com isso vai acontecer o problema do Spring não conseguir injetar o authManager no controller, pois a classe SecurityConfigurations não sera carregada durante a execução dos testes.

Era esse mesmo o problema, troquei o @ActiveProfiles("test") por @ActiveProfiles("dev") e funcionou muito obrigado

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software