Модульный тест Spring ApplicationEventPublisher

Я пытаюсь написать модульный тест для следующего кода:

public void doSomething(List<Object> someObjects){
    // Some logic I want to test...

    eventPublisher.publishEvent(someEvent);
}

Итак, в проекте я вызываю этот метод, который выполняет некоторую логику для списка объектов, а затем, в результате, публикует событие Application, в результате чего получается метод, который был получен.

Я хочу проверить логику внутри этого метода с помощью модульного теста, но я не уверен, как я могу написать модульный тест, если метод не возвращает ничего напрямую, а публикует событие домена. Как правильно это сделать?

Спасибо за вашу помощь.

1
0
1 489
1

Ответы 1

В рамках модульного тестирования достаточно проверить, существует ли файл `eventPublisher. вызывается с правильным аргументом. А также помните, что модульный тест - это документ для каждой строки кода для метода, который нужно протестировать.

Вы должны имитировать eventPublisher в тесте и использовать ArgumentCaptor для захвата аргумента, который передается при вызове сообщения.

В идеале ваш тест должен выглядеть так:

public class ClassToBeTestedTest {

    @Mock
    private ApplicationEventPublisher eventPublisher;

    @InjectMocks
    private ClassToBeTested classToBeTested;

    @Captor
    private ArgumentCaptor<SomeClass> captor;

    @Before
    public void init() {
        initMocks(this);
    }

    @Test
    public void testSend() throws Exception {

        classToBeTested.doSomething(Arrays.asList());

        verify(eventPublisher).publishEvent(captor.capture());
        assertThat(captor.getValue(), is("expected value"))
    }

}   

Другие вопросы по теме