Как издеваться над писателем в тестах Spring Batch Junit?

Я тестирую приложение Spring Batch, используя Junit:

Это моя работа 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");

Проблема в том, что он запускает код шага. Я имею в виду читателя, процессора и писателя. Я хочу пропустить казнь писателя.

Есть ли способ сделать это?

Есть предложения по издевательству над «Писателем» в Spring Batch?

Я пытался издеваться над писателем. Это не дразнит, и настоящая реализация Writer вызывается. Обычно это работало бы, но, похоже, не работает с Spring Batch.

Заранее спасибо.

Ниже приведен код моего тестового класса:

@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 ответ


В ИТ-сценарии вы используете @MockBean для заглушки управляемого bean-компонента контейнера.

Попробуй это:

@MockBean
CustomItemWriter writer;

@Autowired
private ReadQueueMsgFromWs reader;

Вам также не нужно использовать @InjectMocks здесь.