@SpringBootTest não carrega o contexto do Spring

Olá Senhores!

Estou enfrentando um problema com minha aplicação Java com Spring Boot, acontece o seguinte, quando tento criar uma classe qualquer de testes de integração onde desejo que o contexto do Spring seja carregado, o mesmo não acontece, simplesmente acusa um NPE.

Alguém tem ideia do que pode ser?

Exemplo de classe:

@ActiveProfiles("test")
@SpringBootTest
public class UserJdbcRepositoryIT {

    @Autowired
    private UserJdbcRepository subject;

    @Test
    public void test() {
        subject.findByDocument("000.000.001-91"); // subject lança um NPE pois o contexto não foi inicializado
    }

}

No console, nem está aparecendo a logo do spring iniciando? Rapaiz, estranho viu.

Criei um projeto aqui no spring initilizr. Criei um service qualquer, e fiz uma classe de teste com @SpringBootTest e funcionou normalmente. Deve ter alguma configuração faltando ou errada no seu projeto talvez.

Aparentemente pelo que pude perceber após um longo tempo de pesquisa e análise é que devido a versão do Spring que eu estou utilizando neste projeto que é 2.3.7.RELEASE, é necessário ter definido na classe um runner para que o contexto do Spring seja provido, no meu caso utilizei o @RunWith(SpringRunner.class), ficando da seguinte forma:

@ActiveProfiles("test")
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserJdbcRepositoryIT {

    @Autowired
    private UserJdbcRepository subject;

    @Test
    public void test() {
        subject.findByDocument("000.000.001-91");
    }

}

Nas versões mais recentes como por exemplo a 2.5.X essa anotação não é mais necessária, somente o @SpringBootTest já é o suficiente.

1 curtida

Só lembrando que o uso de SpringRunner é para a versão do 4 do junit. Se vc estiver usando o junit 5, use o SpringExtension:

@ExtendWith(SpringExtension.class)

FONTE: https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing.spring-boot-applications

1 curtida

Muito bem lembrado!

No meu caso é o JUnit 4 mesmo! :smile:

1 curtida