Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java StepBuilder.chunk()返回空值和mockito_Java_Junit_Mockito_Spring Batch - Fatal编程技术网

Java StepBuilder.chunk()返回空值和mockito

Java StepBuilder.chunk()返回空值和mockito,java,junit,mockito,spring-batch,Java,Junit,Mockito,Spring Batch,我有一个Spring批处理配置类MyConfig和我的reader、writer、step和Job bean。下面是我的步豆 @Bean public Step myStep() { return stepBuilderFactory.get(STEP_NAME).<MyType, MyType>chunk(getMinimumChunkSize()) .reader(myReader) .writer(myWriter)

我有一个Spring批处理配置类MyConfig和我的reader、writer、step和Job bean。下面是我的步豆

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

}
在调试时,我得到
stepBuilderFactory.get(STEP\u NAME)
给出了如下所示的模拟

但是
stepBuilderFactory.get(STEP_NAME).chunk(getMinimumChunkSize())
返回的是null,而不是simplestbuilder mock。这看起来很直截了当,我是mockito和spring batch的新手。在这种情况下,为什么报税表不起作用


我试着阅读,但这对我想做的事情帮助不大。请说明我的方法是否错误,或者我是否遗漏了什么?

这是因为
chunk
方法创建了一个新的步骤生成器来包装您的模拟:。所以
stepBuilder.chunk(any())
不是你想象中的模拟

也就是说,我想知道为什么您需要模拟
StepBuilderFactory
StepBuilder
。您的测试是测试
stepBuilder
是否正确创建步骤。除非您不信任Spring批处理代码,否则不应该这样做


不过,您应该做的是测试步骤的实际业务逻辑(正确读取/写入数据及其处理逻辑等)。

谢谢您的回答。我知道这不应该被测试,但是当我尝试测试我的作业执行时,这段代码没有通过测试。你能建议一种解决方法来完成答案吗?我在Mockito的Spring批处理单元测试中遇到了类似的问题@Hassine您能否提供一个编码示例,说明如何测试读卡器,并在读卡器实际查询数据库时模拟结果?我不会模拟读卡器,我会使用嵌入或容器化的db和模拟数据进行测试:。
@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);
    }      
}