我有一个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?)
答案 0 :(得分:1)
文档的End-To-End Testing of Batch Jobs部分详细说明了如何测试Spring Batch作业(包括如何使用JobLauncherTestUtils
)。
Spring Batch在AssertFile
模块中提供了一个不错的实用程序类,名为spring-batch-test
,它在您的情况下可能会有所帮助:您编写所需的文件,然后针对该文件断言实际的文件(由作业生成)它。 Validating Output Files部分显示了如何使用此类。
希望这会有所帮助。