Skip to content

Commit 52cfe0b

Browse files
committed
Fix AbstractTaskletStepBuilderTest
1 parent d06f204 commit 52cfe0b

File tree

1 file changed

+29
-62
lines changed

1 file changed

+29
-62
lines changed

spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/AbstractTaskletStepBuilderTests.java

Lines changed: 29 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -19,91 +19,58 @@
1919
import static org.junit.Assert.assertEquals;
2020
import static org.mockito.Mockito.mock;
2121

22-
import java.lang.reflect.Constructor;
23-
import java.lang.reflect.Field;
24-
import org.junit.jupiter.api.BeforeEach;
2522
import org.junit.jupiter.api.Test;
23+
import org.junit.platform.commons.util.ReflectionUtils;
2624
import org.springframework.batch.core.repository.JobRepository;
25+
import org.springframework.batch.core.step.tasklet.TaskletStep;
2726
import org.springframework.batch.item.ItemProcessor;
2827
import org.springframework.batch.item.ItemReader;
2928
import org.springframework.batch.item.ItemWriter;
29+
import org.springframework.batch.repeat.support.RepeatTemplate;
3030
import org.springframework.core.task.SimpleAsyncTaskExecutor;
31-
import org.springframework.core.task.TaskExecutor;
31+
import org.springframework.transaction.PlatformTransactionManager;
3232

3333
/**
3434
* Test cases for verifying the {@link AbstractTaskletStepBuilder} and faultTolerant() functionality.
3535
*
36+
* @author Jérôme Navez
3637
* @author Ilpyo Yang
3738
*/
3839

3940
class AbstractTaskletStepBuilderTests {
41+
private final PlatformTransactionManager transactionManager = mock(PlatformTransactionManager.class);
4042
private final JobRepository jobRepository = mock(JobRepository.class);
41-
private final int chunkSize = 10;
4243
private final ItemReader itemReader = mock(ItemReader.class);
4344
private final ItemProcessor itemProcessor = mock(ItemProcessor.class);
4445
private final ItemWriter itemWriter = mock(ItemWriter.class);
45-
private final SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
46-
SimpleStepBuilder simpleStepBuilder;
47-
48-
private <T> T accessPrivateField(Object o, String fieldName) throws ReflectiveOperationException {
49-
Field field = o.getClass().getDeclaredField(fieldName);
50-
field.setAccessible(true);
51-
return (T) field.get(o);
52-
}
5346

54-
private <T> T accessSuperClassPrivateField(Object o, String fieldName) throws ReflectiveOperationException {
55-
Field field = o.getClass().getSuperclass().getDeclaredField(fieldName);
56-
field.setAccessible(true);
57-
return (T) field.get(o);
58-
}
59-
60-
@BeforeEach
61-
void set(){
62-
StepBuilderHelper stepBuilderHelper = new StepBuilderHelper("test", jobRepository) {
63-
@Override
64-
protected StepBuilderHelper self() {
65-
return null;
66-
}
67-
};
68-
simpleStepBuilder = new SimpleStepBuilder(stepBuilderHelper);
69-
simpleStepBuilder.chunk(chunkSize);
70-
simpleStepBuilder.reader(itemReader);
71-
simpleStepBuilder.processor(itemProcessor);
72-
simpleStepBuilder.writer(itemWriter);
73-
}
47+
private final SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
7448

7549
@Test
76-
void copyConstractorTest() throws ReflectiveOperationException {
77-
Constructor<SimpleStepBuilder> constructor = SimpleStepBuilder.class.getDeclaredConstructor(SimpleStepBuilder.class);
78-
constructor.setAccessible(true);
79-
SimpleStepBuilder copySimpleStepBuilder = constructor.newInstance(simpleStepBuilder);
80-
81-
int copyChunkSize = accessPrivateField(copySimpleStepBuilder, "chunkSize");
82-
ItemReader copyItemReader = accessPrivateField(copySimpleStepBuilder, "reader");
83-
ItemProcessor copyItemProcessor = accessPrivateField(copySimpleStepBuilder, "processor");
84-
ItemWriter copyItemWriter = accessPrivateField(copySimpleStepBuilder, "writer");
50+
void testCopyConstractorFaultTolerant() {
51+
TaskletStep step1 = new StepBuilder("step-name", jobRepository)
52+
.chunk(10, transactionManager)
53+
.reader(itemReader)
54+
.processor(itemProcessor)
55+
.writer(itemWriter)
56+
.faultTolerant()
57+
.taskExecutor(taskExecutor)
58+
.build();
8559

86-
assertEquals(chunkSize, copyChunkSize);
87-
assertEquals(itemReader, copyItemReader);
88-
assertEquals(itemProcessor, copyItemProcessor);
89-
assertEquals(itemWriter, copyItemWriter);
90-
}
91-
92-
@Test
93-
void faultTolerantMethodTest() throws ReflectiveOperationException {
94-
simpleStepBuilder.taskExecutor(taskExecutor); // The task executor is set before faultTolerant()
95-
simpleStepBuilder.faultTolerant();
60+
TaskletStep step2 = new StepBuilder("step-name", jobRepository)
61+
.chunk(10, transactionManager)
62+
.taskExecutor(taskExecutor)
63+
.reader(itemReader)
64+
.processor(itemProcessor)
65+
.writer(itemWriter)
66+
.faultTolerant()
67+
.build();
9668

97-
int afterChunkSize = accessPrivateField(simpleStepBuilder, "chunkSize");
98-
ItemReader afterItemReader = accessPrivateField(simpleStepBuilder, "reader");
99-
ItemProcessor afterItemProcessor = accessPrivateField(simpleStepBuilder, "processor");
100-
ItemWriter afterItemWriter = accessPrivateField(simpleStepBuilder, "writer");
101-
TaskExecutor afterTaskExecutor = accessSuperClassPrivateField(simpleStepBuilder, "taskExecutor");
69+
RepeatTemplate stepOperations1 = (RepeatTemplate) ReflectionUtils
70+
.readFieldValue(TaskletStep.class, "stepOperations", step1).get();
71+
RepeatTemplate stepOperations2 = (RepeatTemplate) ReflectionUtils
72+
.readFieldValue(TaskletStep.class, "stepOperations", step2).get();
10273

103-
assertEquals(chunkSize, afterChunkSize);
104-
assertEquals(itemReader, afterItemReader);
105-
assertEquals(itemProcessor, afterItemProcessor);
106-
assertEquals(itemWriter, afterItemWriter);
107-
assertEquals(taskExecutor, afterTaskExecutor);
74+
assertEquals(stepOperations1.getClass(), stepOperations2.getClass());
10875
}
10976
}

0 commit comments

Comments
 (0)