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

时间:2018-10-21 07:35:25

标签: 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();
}

我当前的测试:

@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
    }
}

有人建议如何测试吗?

(我发现这个问题写于2010年,部分答案提到了“ JobLauncherTestUtils”。What is the best way to test job flow in Spring-Batch?

1 个答案:

答案 0 :(得分:1)

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

Spring Batch在AssertFile模块中提供了一个不错的实用程序类,名为spring-batch-test,它在您的情况下可能会有所帮助:您编写所需的文件,然后针对该文件断言实际的文件(由作业生成)它。 Validating Output Files部分显示了如何使用此类。

希望这会有所帮助。