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

Spring不使用测试配置bean进行测试

丁宏浚
2023-03-14

我有一个依赖Spring批处理JobLauncher的类。

@RestController
@Slf4j
public class Controller {

    @Autowired
    JobLauncher jobLauncher;

    @Autowired
    JobExplorer jobExplorer;

   //...

}

我想使用这个JobLauncher的异步版本,所以我创建了一个配置:

@Configuration
public class BatchConfiguration {

    @Bean(name = "asyncJobLauncher")
    @Primary
    public JobLauncher asyncJobLauncher(final JobRepository jobRepository) throws Exception {
        SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
        jobLauncher.setJobRepository(jobRepository);
        jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
        jobLauncher.afterPropertiesSet();
        return jobLauncher;
    }
}

我不得不使用@Primary,否则当应用程序运行时,其他一些同步JobLauncher会被选中。

现在,在我的测试中,我想使用同步版本来验证作业执行的结果。因此,我在配置中定义了同步bean

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes= {RepoTests.TestConfig.class, MyApp.class},
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
@ActiveProfiles("h2,test")
public class ControllerTest extends AbstractRestController {

    @TestConfiguration
    static class Configuration {

        @Autowired
        JobRepository jobRepository;

        @Bean
        @Primary
        public JobLauncher jobLauncher() {
            SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
            jobLauncher.setJobRepository(jobRepository);;
            return jobLauncher;
        }

    } 
   //..tests
}

然而,当我的测试运行时。。它总是使用异步版本,我的结果不正确。

是否有一种方法可以在我的测试中使用同步工作启动器?

共有1个答案

景信瑞
2023-03-14

请尝试用@Profile(“!test”)

@Profile("!test")
@Bean(name = "asyncJobLauncher")
@Primary
public JobLauncher asyncJobLauncher(final JobRepository jobRepository) throws Exception 
{
  ...
 类似资料:
  • 我有一个在mySQL上运行的小型数据库应用程序。 我想使用H2进行测试。 我向build.gradle添加了必要的依赖项: runtimeOnly’com。h2数据库:h2' 然而,我注意到,在完成测试之后,我的mySQL数据库包含测试期间生成的字段,就好像spring没有使用H2一样。 有什么问题吗?

  • 问题内容: 我的公司一直在评估Spring MVC,以确定我们是否应该在下一个项目中使用它。到目前为止,我喜欢我所看到的内容,现在,我正在查看Spring Security模块,以确定是否可以/应该使用它。 我们的安全要求非常基本。用户只需要能够提供用户名和密码即可访问网站的某些部分(例如获取有关其帐户的信息);并且网站上的页面很少(常见问题解答,支持等),应该为匿名用户提供访问权限。 在我创建的

  • 我正在用Hibernate为我们的Spring Boot REST API创建单元测试。我只是想知道当我使用@transactional时是否有问题。如果我用@Transactional注释测试,数据将永远不会真正进入数据库,并且会绕过潜在的错误源,我是否认为这是正确的?因为某些错误只发生在提交期间?还是我看错了? 在@test之后回滚事务-以下问题与我的问题不完全一致。因为我想知道如何触发提交并

  • 相关pom.xml 我的测试类: 我只是在试着测试数据库。 类级别上的@SQL注释不能像我的情况那样与Testcontainers初始化一起工作吗? 这里需要什么使我的两个初始脚本都运行? 我尝试使用.WithInitScript,它运行了。但是,我有很多数据要初始化,而且文件太大(而且会增长),所以我将DDL(模式)和Inserts(数据)分开。现在,我的问题是如何使用“WithInitScri

  • 我希望能够测试一条从队列中消耗的路由,然后在涉及spring注入服务的bean中进行一些工作,并使用mockito有效地模拟该服务。 我的Spring路线如下: emailService bean有一个自动连接的服务,然后在createEmailRequest()中调用该服务,该服务将转到另一个服务并检索用户数据以供后续使用。 测试: bean如下: 所有编译都正常,当运行路由时,队列上弹出一个对

  • 我正在使用Spring的“Spring test mvc”库来测试web控制器。我有一个非常简单的控制器,它返回一个JSON数组。那么在我的测试中我有: 上述测试返回: 为了快速检查我实际得到了什么,我运行了以下测试: 并在 我不确定为什么无法在JSON数组中看到。