Java StepBuilder.chunk()返回空值和mockito
我有一个Spring批处理配置类MyConfig和我的reader、writer、step和Job bean。下面是我的步豆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)
@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);
}
}