当前位置: 首页 > 知识库问答 >
问题:

Spring Boot集成测试模拟外部依赖性

终彬郁
2023-03-14

我正在尝试为我的Spring Boot应用程序创建集成测试。其想法是启动一个嵌入式postgres db,并使用TestRestTemplate对我的控制器运行http调用。

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

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

我曾尝试模拟依赖项,其中大多数都能正常工作,但我猜这一次它会抱怨,因为它是@配置而不是@组件

依赖配置类:

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

我的测试配置类

@TestConfiguration
public class TestRestTemplateConfig {

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

    ....
}

我已经在我的config类中尝试了@AutoConfigureOrder(1),但是原始的RqueueListenerAutoConfig在启动之前就启动了,我的模拟bean还没有被声明

老实说,嘲笑该依赖项上的每个服务是一种痛苦,但是我还没有想出用一个配置来嘲笑整个依赖项的方法。当我在测试配置文件上时,我尝试不加载依赖项,但是因为它运行Spring上下文,所以我的代码需要它。

我的测试类有以下配置:

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

有什么线索吗?

谢谢

共有1个答案

闻安宜
2023-03-14

尝试

@EnableAutoConfiguration(exclude=RqueueListenerAutoConfig.class)
 类似资料:
  • 已删除MyTestConfig.class,但问题仍然相同。即使我使用@SpringBootTest(classes={Application.Class,MyProblematicServiceImpl.Class}),它仍然在自动连线的地方返回模拟对象。MyProblematicServiceImpl是用@Service注释的空类。

  • 我们有一些传统的laravel项目,它们在类中使用正面。 我们最近的项目使用了底层laravel类的依赖注入,facades所代表的类正如Taylor Otwell自己所暗示的那样。(我们对每个类使用构造函数注入,但为了保持示例简短,这里我使用方法注入并使用单个类。) 我知道外表是可以被嘲笑的 这对单元测试很有效。我试图理解的问题是,这些门面是否被“全球”嘲笑。 例如,让我们假设我正在编写一个集成

  • 如何模拟集成测试所需的许多依赖关系? 我使用Mockito进行纯单元测试。在这种情况下,Pure意味着测试一个类,嘲笑它的所有依赖关系。漂亮。 现在是集成测试。假设在这种情况下,集成测试将测试以下内容: 消息被放入队列 我们也可以说,在第2步中发生的处理是严肃的事情。它依赖于大量的数据库交互、多种外部服务、文件系统,以及各种各样的东西。流还会引发很多副作用,所以我不能简单地确保响应是正确的——我需

  • 我有一个类,它具有外部依赖性,返回列表的未来。如何模拟外部依赖?

  • 问题内容: 我试图在将其他模块作为依赖项的模块中进行单元测试控制器代码的单元化,但是还没有弄清楚如何正确模拟它们。 我正在使用Jasmine Framework,并使用Karma(Testacular)运行测试。 模块代码 规格代码 我得到的错误是Karma是“ no module af.widgets”,因此显然我没有对模块依赖项进行模拟。有什么提示吗? 问题答案: 如果要模拟声明一个或多个服务