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.