如何测试春天的事件监听条件规划环境地政司?

问题描述 投票:1回答:1

我有一个工作注解驱动的事件监听器有一个条件语句。但是,即使代码工作很好,我不能够单元测试这个条件由于测试情况处理规划环境地政司条件的失败。

我注意到,这个错误只发生于春季引导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

调试代码,它看起来像这是由于规划环境地政司未能解释方法参数名“createdEvent”的嘲笑豆,但我不知道如何解决它。

有没有一种方法进行单元测试时的条件?

spring spring-boot events mockito spring-test
1个回答
2
投票
@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

© www.soinside.com 2019 - 2024. All rights reserved.