【发布时间】:2019-12-02 10:16:54
【问题描述】:
我正在使用@SpringBatchTest 在我的 Spring Batch 应用程序上运行 e2e 测试。
一切正常,除非我同时运行两个测试类(将我的测试分为正/负测试类)。第一个运行并测试通过,但第二个尝试再次启动上下文失败。由于它已经启动,测试在InstanceAlreadyExistsException 上失败。
我的两个测试类都使用以下注释定义:
@RunWith(SpringRunner.class)
@SpringBatchTest
@EnableAutoConfiguration
@ContextConfiguration(classes = {MyTestConfiguration.class})
@TestExecutionListeners({MockitoTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
编辑:
总的来说,我的测试是:
@RunWith(SpringRunner.class)
@SpringBatchTest
@EnableAutoConfiguration
@ContextConfiguration(classes = {HardDeleteTestConfiguration.class})
@TestExecutionListeners({MockitoTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public class TestClass1 {
@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
@Autowired
private JobRepositoryTestUtils jobRepositoryTestUtils;
@Before
public void setUp() {
jobRepositoryTestUtils.removeJobExecutions();
}
@Test
public void SpringBatchTest() {
// preparing data for test
// ...
JobExecution jobExecution =
jobLauncherTestUtils.launchJob(createJobParams("myKey","myValue"));
// Perform assertions
// ...
}
}
private void createJobParams(String key, value) {
JobParameters uniqueJobParameters = jobLauncherTestUtils.getUniqueJobParameters();
JobParametersBuilder paramsBuilder = new JobParametersBuilder(uniqueJobParameters);
paramsBuilder.addString(key, value);
return paramsBuilder.toJobParameters();
}
}
TestClass2 与TestClass1 相同,只是数据准备和断言不同。
另外我的测试属性如下:
# Spring Boot configuration
spring.main.allow-bean-definition-overriding=true
spring.batch.job.enabled=false
# Spring Batch configuration
spring.batch.job.names=myBatchJob
我已经为之前的标志尝试了true 和false 的所有组合,但没有任何区别。
【问题讨论】:
-
“一起运行我的两个测试类 [...]”是什么意思?请分享您的测试的最少代码以便能够帮助您。
-
我的意思是右键单击两个测试类所在的“Java”测试资源,然后选择“运行'所有测试'...”。不幸的是,由于公司政策,我无法提供测试代码。但原因是当运行第二个测试类时,测试框架在第一个已经加载它之后尝试再次加载 Spring 上下文,导致异常。问题是如何防止额外的上下文加载。
标签: spring-boot spring-batch spring-test spring-boot-test