我需要为服务和存储库编写集成测试。我发现构建包含服务和存储库 bean 的切片上下文具有挑战性。
@DataJpaTest
@TestPropertySource(properties = "spring.jpa.hibernate.ddl-auto=create-drop")
public class MessageRouterDestinationsTest {
通过此配置,我能够针对内存数据源设置存储库。我希望添加服务 bean 和一切就位。 我已经添加了
@ContextConfiguration(classes = {MessageRouterService.class})
但我明白了
Caused by: java.lang.IllegalStateException: Unable to retrieve @EnableAutoConfiguration base packages
我现在的完整配置是:
@DataJpaTest
@TestPropertySource(properties = "spring.jpa.hibernate.ddl-auto=create-drop")
@ContextConfiguration(classes = {MessageRouterService.class})
@EnableAutoConfiguration
public class MessageRouterDestinationsTest {
@Autowired
private MessageRouterService messageRouterService;
.....
但是,现在我收到了
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException.. for the repository bean.
我的问题是?
@ContextConfiguration
是否禁用@DataJpaTest
?
这是什么原因
原因:java.lang.IllegalStateException:无法检索@EnableAutoConfiguration基础 套餐
使用存储库+服务配置 SpringContext 的最佳方法是什么?
如果您想为切片测试导入单个类,您可以使用
@Import(NameOfClass.class)
,然后从测试类中删除 @ContextConfiguration(classes = {MessageRouterService.class})
和 @EnableAutoConfiguration
。
请注意,您的测试上下文现在需要
MessageRouterService
所依赖的所有 bean。要么用 @MockBean
模拟它们,要么导入它们(可能以永无休止的依赖 bean 导入结束)。