У меня есть рабочий слушатель событий, управляемый аннотациями, с условным оператором.Но даже несмотря на то, что код работает нормально, я не могу выполнить модульное тестирование этого условия из-за ошибки в тестовом примере, обрабатывающем условие SpEL.
Я заметил, что эта ошибка возникает только для Spring Boot 1.5.xверсия, как и версия 2.1.x, работала как положено.К сожалению, мне нужно использовать версию 1.5.x.
Класс, обрабатывающий событие:
@Component
public class MyComponent {
private static final Logger LOGGER = LoggerFactory.getLogger(MyComponent.class);
@EventListener(condition = "#createdEvent.awesome")
public void handleOrderCreatedEvent(OrderCreatedEvent createdEvent) {
LOGGER.info("Awesome event handled");
}
}
Класс события:
public class OrderCreatedEvent {
public OrderCreatedEvent(boolean awesome) {
this.awesome = awesome;
}
private boolean awesome;
public boolean isAwesome() {
return awesome;
}
}
Мой тестовый класс:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyComponent.class)
public class DemoApplicationTests {
@Autowired
private ApplicationEventPublisher publisher;
@MockBean
private MyComponent myComponent;
@Test
public void handleOrderCreatedEvent_shouldExecute_whenAwesome() {
OrderCreatedEvent event = new OrderCreatedEvent(true);
publisher.publishEvent(event);
verify(myComponent).handleOrderCreatedEvent(event);
}
}
Полный исходный код можно найти здесь: https://github.com/crazydevman/spring-event-testing
При запуске приложения все работает как положено.Однако при запуске тестового примера я получаю эту ошибку:
org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'awesome' cannot be found on null
Отладка кода, похоже, это связано с тем, что SpEL не может интерпретировать имя параметра метода 'создалEvent 'для смоделированного бина, но я не знаю, как это исправить.
Есть ли способ модульного тестирования условного события?