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

在集成测试期间修改在主应用程序上下文中创建的bean

包承望
2023-03-14

在我的springboot应用程序中,我使用以下类执行集成测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AccountLoadApplication.class,
    loader = SpringApplicationContextLoader.class)
@WebIntegrationTest(randomPort = true)
public class LoaderTest {
  @Bean
  public ResourceLoader recapMvsFileResourceLoader() {
    return new RemoteFileResourceLoader(remoteHostProperties(), new SFTPRemoteFileService());

  }
@Configuration
public class AtddTestConfig {


  @Bean
  public ResourceLoader mvsFileResourceLoader() {
   ResourceLoader recapMvsFileResourceLoader =
        new RemoteFileResourceLoader(remoteHostProperties(), new FakeSFTPRemoteFileService());
    return recapMvsFileResourceLoader;
  }
@Bean
  public RemoteFileService remoteFileService() {
    return new SFTPRemoteFileService();
  }

  @Bean
  public ResourceLoader recapMvsFileResourceLoader() {
    return new RemoteFileResourceLoader(remoteHostProperties(), remoteFileService());

  }

下面是在我的测试配置类中定义的bean

  @Bean
  @Profile("local")
  @Primary
  public RemoteFileService remoteFileService() {
    return new FakeSFTPRemoteFileService();
  }

不过,只创建生产bean而不创建主bean。

共有1个答案

范承望
2023-03-14
  1. 使用@profile注释只在测试上下文中启用测试bean
  2. 在测试bean上使用@primary注释,这样spring就可以使用测试bean而不是生产bean。

下面是我的Github存储库和使用该机制的工作示例

 类似资料:
  • 我被要求在一个非常大的SpringBoot项目中为一个服务创建一个集成测试,该项目产生了几十个已实现的服务。当应用程序执行时,所有这些服务都被部署了——我希望避免部署与我正在为其创建测试的服务无关的所有服务。不幸的是,我(还)没有像我希望的那样有很多Spring启动测试的经验,因此我想知道解决这个问题的最佳方法是什么。 我曾考虑在测试类中使用注释对所有不相关的服务进行注释,并使用对所有相关服务进行

  • 问题内容: 我被要求为一个很大的SpringBoot项目中的服务创建一个集成测试,该项目会产生许多已实现的服务。执行该应用程序时,将部署所有这些服务- 我想避免部署与我正在为其创建测试的服务无关的所有服务。不幸的是,我对弹簧启动测试的经验还不如我所希望的那么多,因此我想知道解决这个问题的最佳方法是什么。 我当时正在考虑使用注解对所有不相关的服务进行注释,并在测试类中对所有相关的服务进行注释,但是我

  • 我正在开发一个spring boot(V2.2.4)应用程序,专门添加集成测试,该测试利用Testcontainers实例化一个docker容器,该容器运行一个Postgres实例进行测试,以对其执行数据库事务。这些测试通过Liquibase将我们的数据库模式推送到Postgres实例中。我是按照这个指南实现的。到测试时Postgres的连接由一个名为TestPostgresConfig的类管理。

  • 我需要在REST级别编写一个e2e测试,发送真正的请求。所以我想用应用上下文,而不是嘲讽豆。 有一个自动连接的,以及此<code>MyService。类依赖于两个存储库类。因此,我尝试模拟,并以以下方式将它们注入真正的: 但我得到了以下错误: 我还尝试使用< code > @ context configuration(classes = { my config . class })没有成功: 我

  • 我必须为microservice X创建一个集成测试,它可以从外部sftp服务器下载、处理和导入csv文件。整个过程由一个Spring Boot调度程序任务启动,该任务启动一个spring批处理作业来处理和导入数据。导入过程由spring batch writer完成,它是一个restTemplate存储库(因此它调用对另一个微服务的post请求)。 我已经设法模拟了sftp服务器,在其上放置了一

  • 问题内容: 我有一堆JUnit测试用例(集成测试),它们在逻辑上分为不同的测试类。 我们能够为每个测试类加载一次Spring应用程序上下文,然后将其重新用于JUnit测试类中的所有测试用例 但是,我们只是想知道是否有一种方法可以对一堆JUnit测试类仅加载一次Spring应用程序上下文。 FWIW,我们使用Spring 3.0.5,JUnit 4.5并使用Maven构建项目。 问题答案: 是的,这