Jav*_*xas 5 integration-testing spring-batch
尝试为 Spring Batch 应用程序创建一些端到端测试,效果很好。我收到一个 sql 错误,因为它没有初始化 Spring Batch 处理表:org.postgresql.util.PSQLException: ERROR: relation "batch_job_instance" does not exist
我在以下位置有这段代码src/test/resources/application.properties:
spring.datasource.initialize=true
spring.datasource.initialization-mode=always
spring.datasource.platform=postgresql
spring.batch.initialize-schema=always
Run Code Online (Sandbox Code Playgroud)
这与我在`src/main/resources/application.properties 上的相同并且有效。
这是我的代码ApplicationTest:
spring.datasource.initialize=true
spring.datasource.initialization-mode=always
spring.datasource.platform=postgresql
spring.batch.initialize-schema=always
Run Code Online (Sandbox Code Playgroud)
我有一个特定的方法TestConfiguration来生成Bean一个DataSource.
@RunWith(SpringRunner.class)
@ContextConfiguration(classes={
TestConfiguration.class,
JobCompletionNotificationListener.class,
BatchConfiguration.class
})
@SpringBatchTest
public class ApplicationTests {
@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
@Test
public void testJob() throws Exception {
JobExecution jobExecution = jobLauncherTestUtils.launchJob();
}
}
Run Code Online (Sandbox Code Playgroud)
我期望创建所有表(内部 Batch 表和 中定义的表schema-all.sql)。
但我收到以下错误org.postgresql.util.PSQLException: ERROR: relation "batch_job_instance" does not exist。
我不明白为什么在主应用程序中一切都会自动工作,而在测试中却不然。
如果 Spring 测试未命中,错过了BatchDataSourceInitializer实际应用中 Spring Boot 自动配置的内容,并且您不想编写完整的@SpringBootTest,可以通过添加注解来选择性地添加 Spring Batch 的自动配置
@ImportAutoConfiguration(BatchAutoConfiguration.class)
Run Code Online (Sandbox Code Playgroud)
然后,这将为注入的DataSource.