如何在Spring Batch Junit测试中模拟编写器?

时间:2019-05-16 11:23:18

标签: java unit-testing junit mockito spring-batch

我正在使用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");
    }

}

1 个答案:

答案 0 :(得分:0)

在IT场景中,您使用@MockBean对容器管理的Bean存根。

尝试一下:

@MockBean
CustomItemWriter writer;

@Autowired
private ReadQueueMsgFromWs reader;

您也不需要在这里使用@InjectMocks