Spring boot应用测试服务+存储库在一起

问题描述 投票:0回答:1

我需要为服务和存储库编写集成测试。我发现构建包含服务和存储库 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.

我的问题是?

  1. @ContextConfiguration
    是否禁用
    @DataJpaTest

  2. 这是什么原因

    原因:java.lang.IllegalStateException:无法检索@EnableAutoConfiguration基础 套餐

  3. 使用存储库+服务配置 SpringContext 的最佳方法是什么?

spring-boot spring-boot-test
1个回答
0
投票

如果您想为切片测试导入单个类,您可以使用

@Import(NameOfClass.class)
,然后从测试类中删除
@ContextConfiguration(classes = {MessageRouterService.class})
@EnableAutoConfiguration

请注意,您的测试上下文现在需要

MessageRouterService
所依赖的所有 bean。要么用
@MockBean
模拟它们,要么导入它们(可能以永无休止的依赖 bean 导入结束)。

© www.soinside.com 2019 - 2024. All rights reserved.