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)
我正在尝试为我的 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)