【问题标题】:Spring @MockBean annotated repository is not used within Kafka listener in test在测试中的 Kafka 侦听器中未使用 Spring @MockBean 注释存储库
【发布时间】:2021-07-25 04:39:19
【问题描述】:

我有一个奇怪的问题。我有一系列测试,有时使用从侦听器接收到的 Kafka 队列上的消息(都在应用程序的相同距离内)然后处理。 Kafka 是在 Docker 的帮助下实例化的。

在测试类中有一个使用 @MockBean 注释的存储库,并且该存储库也在 Kafka 侦听器中使用。

什么时候运行Idea中的测试所有工作,并且在侦听器中,存储库接口提升了模拟bean。

在终端上使用 Gradle 执行测试时,有时并非总是如此,在列表器中使用的是真实存储库,而不是模拟存储库。

感谢您的帮助。

【问题讨论】:

    标签: java spring testing gradle


    【解决方案1】:

    我找到了问题,似乎问题出在交易上。在卡夫卡我使用它。经过一番搜索后,我找到了解决方案。在测试中,我为测试配置创建了一个类,该类创建了 bean 的模拟,如下所示:

    @TestConfiguration
    public class ConfMock {
        @Bean
        @Primary
        public IdentityManagementRepository identityManagementRepository() {
            return mock(IdentityManagementRepository.class);
        }
    
    }
    

    在真正的测试类中,我像这样使用注释@Import(ConfMock.class):

    @Import(ConfMock.class)
    @AutoConfigureMockMvc
    @SpringBootTest()
    @ActiveProfiles("test")
    @TestInstance(TestInstance.Lifecycle.PER_CLASS)
    public class ApplicationControllerTest extends AbstractTest {
    
    }
    

    这个解决方案来自this answer,我已经在一个单独的类中提出了配置,它可以工作。

    谢谢你

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 2021-05-26
      • 2020-06-22
      • 2021-07-28
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      相关资源
      最近更新 更多