Não foi possível encontrar @SpringBootConfiguration com @DataJpaTest

Não foi possível encontrar @SpringBootConfiguration com @DataJpaTest

1. Introdução

Em nosso tutorial emtesting in Spring Boot, vimos como podemos usar a anotação@DataJpaTest.

Neste próximo tutorial, veremoshow to resolve the error “Unable to find a @SpringBootConfiguration“.

2. Causas

A anotação@DataJpaTest nos ajuda a configurar um teste JPA. Para isso, inicializa o aplicativo, ignorando partes irrelevantes. Por exemplo, ele ignorará os controladores MVC.

No entanto, para inicializar o aplicativo, ele precisa de configuração.

Para isso, ele pesquisa no pacote atual e sobe na hierarquia do pacote até que uma configuração seja encontrada.

Por exemplo, vamos adicionar um@DataJpaTest no pacotecom.example.data.jpa. Em seguida, ele pesquisará por uma classe de configuração em:

  • com.example.data.jpa

  • com.example.data

  • e assim por diante

No entanto, quando nenhuma configuração for encontrada, o aplicativo relatará um erro:

Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...)
  with your test java.lang.IllegalStateException

Isso pode acontecer, por exemplo, porque a classe de configuração está localizada em um pacote mais específico, comocom.example.data.jpa.application.

Vamos mover a classe de configuração paracom.example.data.jpa. Como resultado, o Spring agora será capaz de encontrá-la.

Por outro lado, podemos ter um módulo que não possui nenhum@SpringBootConfiguration. Na próxima seção, veremos esse cenário.

3. Faltando@SpringBootConfiguration

E se nosso módulo não contiver nenhum@SpringBootConfiguration? Pode haver vários motivos para isso. Vamos supor, para este tutorial, que temos um módulo contendo apenas classes de modelo.

Portanto, a solução é direta. Vamos adicionar um@SpringBootApplication ao nosso código de teste:

@SpringBootApplication
public class TestApplication {}

Agora que temos uma classe anotada, o Spring pode inicializar nossos testes.

Para validar nossa configuração, vamos injetar umTestEntityManagere validar se ele está definido:

@RunWith(SpringRunner.class)
@DataJpaTest
public class DataJpaUnitTest {

    @Autowired
    TestEntityManager entityManager;

    @Test
    public void givenACorrectSetup_thenAnEntityManagerWillBeAvailable() {
        assertNotNull(entityManager);
    }
}

Este teste é bem-sucedido quandoSpring can find the @SpringBootConfiguration in its own package or one of its parent packages.

4. Conclusão

Neste breve tutorial, examinamos duas causas diferentes para o erro: “Não foi possível encontrar a@SpringBootConfiguration“.

Primeiro, analisamos um caso em que a classe de configuração não pôde ser encontrada. Isso foi por causa de sua localização. Resolvemos isso movendo a classe de configuração para outro local.

Segundo, analisamos um cenário em que nenhuma classe de configuração estava disponível. Resolvemos isso adicionando um@SpringBootApplication à nossa base de código de teste.

Como sempre, o código-fonte completo do artigo está disponívelover on GitHub.