StepBuilder.chunk () возвращает null с mockito - PullRequest
0 голосов
/ 14 октября 2019

У меня есть класс MyConfig для конфигурирования Spring с моим читателем, писателем, шагом и компонентами Job. Ниже приведен мой бин Step.

@Bean
public Step myStep() {
    return stepBuilderFactory.get(STEP_NAME).<MyType, MyType>chunk(getMinimumChunkSize())
            .reader(myReader)
            .writer(myWriter)
            .build();

}

Когда я пытаюсь выполнить его модульное тестирование с помощью приведенного ниже класса

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(classes = {MyConfig.class})
@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class,
                StepScopeTestExecutionListener.class })
public class MyConfigTest {

    @Mock
    private StepBuilderFactory stepBuilderFactory;

    @Mock
    private StepBuilder stepBuilder;

    @Mock
    private SimpleStepBuilder simpleStepBuilder;

    @Mock
    FlatFileItemWriter myWriter;

    @Mock
    JdbcCursorItemReader myReader;

    @InjectMocks
    private MyConfig myConfig;

    @Before
    public void setUp() {
        when(stepBuilderFactory.get(anyString())).thenReturn(stepBuilder);
        when(stepBuilder.chunk(any())).thenReturn(simpleStepBuilder);
        when(simpleStepBuilder.reader(myReader)).thenReturn(simpleStepBuilder);
        when(simpleStepBuilder.writer(myWriter)).thenReturn(simpleStepBuilder);
    }

    @Test
    public void testChecklistStep() {
        final Step step = myConfig.checklistStep();
        assertNotNull(step);
    }      
}

При отладке я получаю stepBuilderFactory.get(STEP_NAME), который дает макет, как ожидается, как показано ниже

enter image description here

но stepBuilderFactory.get(STEP_NAME).<MyType, MyType>chunk(getMinimumChunkSize()) возвращает пустое значение вместо макета SimpleStepBuilder. Это выглядит довольно просто, я новичок в мокито и весенней партии. Почему thenReturn не работает в этом случае?

Я пытался прочитать официальную документацию , но это не помогло тому, что я пытаюсь сделать. Пожалуйста, предложите, если мой подход неверен или я что-то упускаю?

1 Ответ

1 голос
/ 14 октября 2019

Это потому, что метод chunk создает новый построитель шагов, обертывающий ваш макет: https://github.com/spring-projects/spring-batch/blob/master/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/StepBuilder.java#L69. Так что stepBuilder.chunk(any()) - это не тот макет, который вы думаете.

Тем не менее, мне интересно, почему вы все равно должны насмехаться над StepBuilderFactory и StepBuilder. Ваш тест проверяет, что stepBuilder правильно создает Шаг. Если вы не доверяете коду Spring Batch, вам не следует этого делать.

Что вам следует делать, хотя проверять фактическую бизнес-логику вашего шага (правильное чтение / запись данных, логику обработки и т. Д.).

...