如何测试 Spring Batch 应用程序的整个流程?

Ore*_*ren 7 java spring spring-batch

我有一个 Spring boot + 批处理应用程序,它读取源 CSV 文件,处理它并写入目标 CSV 文件,我正在努力编写测试:使用输入 - “simpleFlowInput.csv”并比较“simpleFlowActual.csv” ” 输出带有“simpleFlowExpected.csv”文件,我想编写其中的许多测试,但很难做到这一点。

我的申请只包含一个步骤和一项工作:

@Bean("csvFileToFileStep")
public Step csvFileToFileStep() {
    return stepBuilderFactory.get("csvFileToFileStep").<RowInput, RowOutput>chunk(10000).reader(csvRowsReader()).processor(csvRowsProcessor())
            .writer(compositeItemWriter()).build();
}

@Bean("csvFileToCsvJob")
Job csvFileToCsvJob(JobCompletionNotificationListener listener) {
    return jobBuilderFactory.get("csvFileToCsvJob").incrementer(new RunIdIncrementer()).listener(listener).flow(csvFileToFileStep()).end()
            .build();
}
Run Code Online (Sandbox Code Playgroud)

我目前的测试:

@RunWith(SpringJUnit4ClassRunner.class)
@Configuration
@EnableBatchProcessing
@SpringBootTest
public class Tester{

    @Autowired
    Job csvFileToCsvJob;
    @Autowired
    Step csvFileToFileStep;
    @Autowired
    CsvFileReadProcessAndWriteConfig csvFileReadProcessAndWriteConfig;
    private JobLauncherTestUtils jobLauncherTestUtils = new JobLauncherTestUtils();


    @Test
    public void testSimpleFlow() throws Exception {

        ClassLoader classLoader = getClass().getClassLoader();
        File fileInput = new File(classLoader.getResource("simpleFlowInput.csv").getFile());
        File fileActual = new File(classLoader.getResource("simpleFlowActual.csv").getFile());
        File fileExpected = new File(classLoader.getResource("simpleFlowExpected.csv").getFile());

        FileManager.getInstance().setInputFileLocation(fileInput.toString());
        FileManager.getInstance().setOutputFileLocation(fileActual.toString());

        System.out.println(fileExpected.length());
        System.out.println(fileActual.length());

        Assert.assertTrue(fileExpected.length() == fileActual.length());
        AssertFile.assertFileEquals(fileExpected,fileActual);//compare
    }
}
Run Code Online (Sandbox Code Playgroud)

关于如何测试它的任何建议?

(我发现这个问题写于 2010 年,部分答案提到了“JobLauncherTestUtils”。在 Spring-Batch 中测试工作流程的最佳方法是什么?

Mah*_*ine 5

文档的End-To-End Testing of Batch Jobs部分详细解释了如何测试 Spring Batch 作业(包括如何使用JobLauncherTestUtils)。

Spring Batch 提供了一个AssertFilespring-batch-test模块中调用的不错的实用程序类,它对您的情况很有帮助:您编写预期的文件,然后针对它断言实际的文件(由您的工作生成)。验证输出文件部分显示了如何使用此类。

希望这可以帮助。