Я пытаюсь написать модульный тест для следующего кода:
public void doSomething(List<Object> someObjects){
// Some logic I want to test...
eventPublisher.publishEvent(someEvent);
}
Итак, в проекте я вызываю этот метод, который выполняет некоторую логику для списка объектов, а затем, в результате, публикует событие Application, в результате чего получается метод, который был получен.
Я хочу проверить логику внутри этого метода с помощью модульного теста, но я не уверен, как я могу написать модульный тест, если метод не возвращает ничего напрямую, а публикует событие домена. Как правильно это сделать?
Спасибо за вашу помощь.
В рамках модульного тестирования достаточно проверить, существует ли файл `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"))
}
}