Как проверить слушатель событий Spring на условном SpEL? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть рабочий слушатель событий, управляемый аннотациями, с условным оператором.Но даже несмотря на то, что код работает нормально, я не могу выполнить модульное тестирование этого условия из-за ошибки в тестовом примере, обрабатывающем условие 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 'для смоделированного бина, но я не знаю, как это исправить.

Есть ли способ модульного тестирования условного события?

1 Ответ

0 голосов
/ 07 февраля 2019
@Component
public class MyComponent {

    private static final Logger LOGGER = LoggerFactory.getLogger(MyComponent.class);

    @EventListener(condition = "#root.args[0].awesome")
    public void handleOrderCreatedEvent(OrderCreatedEvent createdEvent) {
        LOGGER.info("Awesome event handled");
    }

}

enter image description here

...