将 @TestExecutionListeners 添加到测试套件时,@Sql 脚本不会为 @test 运行

Luc*_*s T 5 java spring junit4 spring-batch

我正在测试一个 Spring Batch ItemProcessor,它从数据库中读取值。

根据测试步骤范围组件页面上的建议,我将@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class })添加到测试套件注释中:

@ContextConfiguration(locations = { "classpath:spring/context-configuration.xml" })
@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class })
@RunWith(SpringJUnit4ClassRunner.class)
public class CustomItemProcessorTest 
{
    @Autowired
    private JobLauncherTestUtils jobLauncherTestUtils;

    @Autowired
    private ItemProcessor<InputClass, OutputClass> customItemProcessor;

    @Test
    @Sql(scripts = {"insertDataToBeRetrievedByCustomItemProcessor.sql" }, 
            config = @SqlConfig(dataSource = "dataSource"))
    public void assertThatCustomItemProcessorProcessorIsRetrievingStillBirthSasEtlObject() throws Exception 
    {
        OutputClass outputObject = customItemProcessor.process(inputClassObject);
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是上面的行:@TestExecutionListeners...正在阻止 @Sql(scripts =... 命令执行。

customItemProcessor 可以轻松地从数据库读取值。

为什么上述注释会阻止 @Sql 脚本运行?我该如何解决这个问题?

Ber*_*ric 4

当您使用注释TestExecutionListeners时,您会过度使用默认配置来执行 sql 脚本,您需要添加此侦听器SqlScriptsTestExecutionListener

@TestExecutionListeners( { 
  DependencyInjectionTestExecutionListener.class,
  StepScopeTestExecutionListener.class, 
  SqlScriptsTestExecutionListener 
})
Run Code Online (Sandbox Code Playgroud)