错误:java.lang.IllegalStateException: Unable to retrieve @EnableAutoConfiguration base packages
在做单元测试的时候,出现这个错误,直接上代码和解决方案
这个是出错的代码,目标想用datajpatest测试Elasticsearch,由于datajpatest原生并不包含Elasticsearch的启动项所以需要手动添加
@DataJpaTest( includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Repository.class))
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) //不使用内存数据库,直接使用真实数据库
@Import({ElasticsearchConfig.class , ElasticsearchDataAutoConfiguration.class , ElasticsearchRepositoriesAutoConfiguration.class
})
public class UserEsRepositoryTest {
...
报错
java.lang.IllegalStateException: Unable to retrieve @EnableAutoConfiguration base packages
原因分析:
@Import({ElasticsearchConfig.class , ElasticsearchDataAutoConfiguration.class , ElasticsearchRepositoriesAutoConfiguration.class
})
这种写在外面的写法,根正常的包引入是没有区别的,造成了部分bean冲突,可能是datajpatest里包含了其中的某些包,细节不再纠结,我们可以使用TestConfiguration进行覆盖式引入,以屏蔽掉冲突的部分,希望可以给大家一些启示
下面是修正后的方式,完美通过
@DataJpaTest( includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Repository.class))
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) //不使用内存数据库,直接使用真实数据库
public class UserEsRepositoryTest {
@TestConfiguration
@Import({
ElasticsearchConfig.class
, ElasticsearchDataAutoConfiguration.class
, ElasticsearchRepositoriesAutoConfiguration.class})
static class TestConfig {
}
...