我正在使用Junit测试Spring Batch应用程序:
这是我的工作xml配置:
<!-- parse queue -->
<batch:step id="parseQueue">
<batch:tasklet>
<batch:chunk
reader="readQueue"
processor="processQueue"
writer="customItemWriter"
commit-interval="100">
</batch:chunk>
</batch:tasklet>
</batch:step>
我正在测试“ parseQueue”步骤。
我正在使用JobLauncherTestUtils测试如下步骤:
jobLauncherTestUtils.launchStep(“ parseQueue”);
问题是它运行整个步骤代码。我的意思是读者,处理器和作家。 我想跳过Writer的执行。
有办法吗?
关于在Spring Batch中嘲笑“作家”的任何建议吗?
我试图嘲笑作家。它不会进行模拟,而是会调用真正的Writer实现。通常,它本来可以工作,但是似乎与Spring Batch无关。
谢谢。
下面是我的Test类的代码:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:/job/qhandler-job.xml",
"classpath:/spring/qhandler-applicationContext.xml" })
public class TestReader {
@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
@Mock
CustomItemWriter writer;
@InjectMocks
private ReadQueueMsgFromWs reader;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testReader() throws UnexpectedInputException, ParseException, NonTransientResourceException, Exception
{
jobLauncherTestUtils.launchStep("parseQueue");
}
}
答案 0 :(得分:0)
在IT场景中,您使用@MockBean
对容器管理的Bean存根。
尝试一下:
@MockBean
CustomItemWriter writer;
@Autowired
private ReadQueueMsgFromWs reader;
您也不需要在这里使用@InjectMocks
。