* BAEL-3299: First version. Broken tests * BAEL-3299: Fix tests * BAEL-3299: Include gitignore for output files * BAEL-3299: Example of writer unit test * BAEL-3299: Cleaned up and included more tests * BAEL-3299: Updated to use JobParameters * BAEL-3299: Fixed broken startup and included cleanup for tests * BAEL-3299: Fine tuned version. Fixed formatting. * BAEL-3299: Cleaned up redundant stuff * BAEL-3299: Fixed formatting * BAEL-3299: Moved source code in spring-batch module * BAEL-3299: Fixed broken tests
116 lines
4.7 KiB
Java
116 lines
4.7 KiB
Java
package org.baeldung.batchtesting;
|
|
|
|
import static org.hamcrest.Matchers.is;
|
|
import static org.junit.Assert.assertThat;
|
|
|
|
import java.util.Collection;
|
|
|
|
import org.junit.After;
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
import org.springframework.batch.core.ExitStatus;
|
|
import org.springframework.batch.core.JobExecution;
|
|
import org.springframework.batch.core.JobInstance;
|
|
import org.springframework.batch.core.JobParameters;
|
|
import org.springframework.batch.core.JobParametersBuilder;
|
|
import org.springframework.batch.core.StepExecution;
|
|
import org.springframework.batch.test.AssertFile;
|
|
import org.springframework.batch.test.JobLauncherTestUtils;
|
|
import org.springframework.batch.test.JobRepositoryTestUtils;
|
|
import org.springframework.batch.test.context.SpringBatchTest;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
|
import org.springframework.core.io.FileSystemResource;
|
|
import org.springframework.test.annotation.DirtiesContext;
|
|
import org.springframework.test.annotation.DirtiesContext.ClassMode;
|
|
import org.springframework.test.context.ContextConfiguration;
|
|
import org.springframework.test.context.TestExecutionListeners;
|
|
import org.springframework.test.context.junit4.SpringRunner;
|
|
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
|
|
import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
|
|
|
|
@RunWith(SpringRunner.class)
|
|
@SpringBatchTest
|
|
@EnableAutoConfiguration
|
|
@ContextConfiguration(classes = { SpringBatchConfiguration.class })
|
|
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class })
|
|
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
|
|
public class SpringBatchIntegrationTest {
|
|
|
|
private static final String TEST_OUTPUT = "src/test/resources/output/actual-output.json";
|
|
|
|
private static final String EXPECTED_OUTPUT = "src/test/resources/output/expected-output.json";
|
|
|
|
private static final String TEST_INPUT = "src/test/resources/input/test-input.csv";
|
|
|
|
@Autowired
|
|
private JobLauncherTestUtils jobLauncherTestUtils;
|
|
|
|
@Autowired
|
|
private JobRepositoryTestUtils jobRepositoryTestUtils;
|
|
|
|
@After
|
|
public void cleanUp() {
|
|
jobRepositoryTestUtils.removeJobExecutions();
|
|
}
|
|
|
|
private JobParameters defaultJobParameters() {
|
|
JobParametersBuilder paramsBuilder = new JobParametersBuilder();
|
|
paramsBuilder.addString("file.input", TEST_INPUT);
|
|
paramsBuilder.addString("file.output", TEST_OUTPUT);
|
|
return paramsBuilder.toJobParameters();
|
|
}
|
|
|
|
@Test
|
|
public void givenReferenceOutput_whenJobExecuted_thenSuccess() throws Exception {
|
|
// given
|
|
FileSystemResource expectedResult = new FileSystemResource(EXPECTED_OUTPUT);
|
|
FileSystemResource actualResult = new FileSystemResource(TEST_OUTPUT);
|
|
|
|
// when
|
|
JobExecution jobExecution = jobLauncherTestUtils.launchJob(defaultJobParameters());
|
|
JobInstance actualJobInstance = jobExecution.getJobInstance();
|
|
ExitStatus actualJobExitStatus = jobExecution.getExitStatus();
|
|
|
|
// then
|
|
assertThat(actualJobInstance.getJobName(), is("transformBooksRecords"));
|
|
assertThat(actualJobExitStatus.getExitCode(), is("COMPLETED"));
|
|
AssertFile.assertFileEquals(expectedResult, actualResult);
|
|
}
|
|
|
|
@Test
|
|
public void givenReferenceOutput_whenStep1Executed_thenSuccess() throws Exception {
|
|
|
|
// given
|
|
FileSystemResource expectedResult = new FileSystemResource(EXPECTED_OUTPUT);
|
|
FileSystemResource actualResult = new FileSystemResource(TEST_OUTPUT);
|
|
|
|
// when
|
|
JobExecution jobExecution = jobLauncherTestUtils.launchStep("step1", defaultJobParameters());
|
|
Collection<StepExecution> actualStepExecutions = jobExecution.getStepExecutions();
|
|
ExitStatus actualJobExitStatus = jobExecution.getExitStatus();
|
|
|
|
// then
|
|
assertThat(actualStepExecutions.size(), is(1));
|
|
assertThat(actualJobExitStatus.getExitCode(), is("COMPLETED"));
|
|
AssertFile.assertFileEquals(expectedResult, actualResult);
|
|
}
|
|
|
|
@Test
|
|
public void whenStep2Executed_thenSuccess() {
|
|
|
|
// when
|
|
JobExecution jobExecution = jobLauncherTestUtils.launchStep("step2", defaultJobParameters());
|
|
Collection<StepExecution> actualStepExecutions = jobExecution.getStepExecutions();
|
|
ExitStatus actualExitStatus = jobExecution.getExitStatus();
|
|
|
|
// then
|
|
assertThat(actualStepExecutions.size(), is(1));
|
|
assertThat(actualExitStatus.getExitCode(), is("COMPLETED"));
|
|
actualStepExecutions.forEach(stepExecution -> {
|
|
assertThat(stepExecution.getWriteCount(), is(8));
|
|
});
|
|
}
|
|
|
|
}
|