Spring 引导集成测试模拟外部依赖

Spring Boot Integration test mock external dependency

我正在尝试为我的 Spring 启动应用程序创建集成测试。我的想法是使用 TestRestTemplate 向我的控制器启动一个嵌入式 postgres 数据库和 运行 http 调用。

问题是我的项目有一个我们用于 redis 队列的依赖项。

    <dependency>
      <groupId>com.github.sonus21</groupId>
      <artifactId>rqueue-spring-boot-starter</artifactId>
      <version>2.9.0-RELEASE</version>
    </dependency>

我试图模拟出依赖关系并且它们中的大部分都有效,但是我猜这个它会抱怨,因为它是 @Configuration 而不是 @Component:

依赖配置class:

@Configuration
@AutoConfigureAfter({RedisAutoConfiguration.class})
@ComponentScan({"com.github.sonus21.rqueue.web", "com.github.sonus21.rqueue.dao"})
public class RqueueListenerAutoConfig extends RqueueListenerBaseConfig {
    public RqueueListenerAutoConfig() {
    }
...
}

我的测试配置class

@TestConfiguration
public class TestRestTemplateConfig {

    @Bean
    @Primary
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public RqueueListenerAutoConfig rqueueListenerAutoConfig() {
        return Mockito.mock(RqueueListenerAutoConfig.class);
    }

    ....
}

我已经在我的配置 class 中尝试使用 @AutoConfigureOrder(1),但是原始的 RqueueListenerAutoConfig 在任何事情之前启动并且我的模拟 bean 还没有被声明。

老实说,在该依赖项上模拟每个服务很痛苦,但我还没有想出一种方法来通过单个配置模拟整个依赖项。当我在测试配置文件上时,我尝试不加载依赖项,但因为它 运行s spring 上下文我的代码需要它。

我的测试 class 具有以下配置:

@SpringBootTest
@Import(TestRestTemplateConfig.class)
@ActiveProfiles("test")
public class TestClass {
...
}

有什么线索吗?

谢谢。

尝试

@EnableAutoConfiguration(exclude=RqueueListenerAutoConfig.class)