Ошибка при модульном тестировании весенней интеграции dsl

Я вижу следующую ошибку при запуске модульного тестирования моего кода интеграции Spring. А также я не был уверен, как издеваться над моей службой и другими зависимостями при использовании mockIntegrationContext.

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'orderInputEndPoint' available

    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:686)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1210)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)

Основной программный код

@EnableIntegration
public class OrderPersistFlow {

    @Autowired
    private ActiveMQConnectionFactory activeMQConnectionFactory;

    @Autowired
    private OrderTransformer orderTransformer;

    @Autowired
    private OrderService orderService;


    @Bean
    public IntegrationFlow persistFlow() {
        return IntegrationFlows
                .from(Jms.messageDrivenChannelAdapter(activeMQConnectionFactory)
                        .id("orderInputEndPoint")
                        .destination("order.queue")
                        .jmsMessageConverter(new MarshallingMessageConverter(jaxbMarshaller())))
                .filter(OrderVO.class, p -> p.getOrderStatus().equals("OPEN")
                .transform(orderTransformer)
                .handle(orderService, "save")
                .get();
    }
}

Тестовый код

RunWith(SpringRunner.class)
@SpringIntegrationTest(noAutoStartup = "orderInputEndPoint")
public class OrderPersistFlowTest {

    @Autowired
    private MockIntegrationContext mockIntegrationContext;

    @Test
    public void persistFlowTest(){
        OrderVO orderVO = new OrderVO();
        orderVO.setId("1234");
        orderVO.setName("TestOrder");
        orderVO.setDescription("order desc");

        MessageSource<OrderVO> messageSource = () -> new GenericMessage<>(orderVO);

        this.mockIntegrationContext.substituteMessageSourceFor("orderInputEndPoint", messageSource);

        Message<?> receive = messageSource.receive();
    }
}

person nagendra    schedule 08.06.2018    source источник


Ответы (1)


Я не вижу @ContextConfiguration(classes = OrderPersistFlow.class) в вашем тестовом классе: https://docs.spring.io/spring/docs/5.0.6.RELEASE/spring-framework-reference/testing.html#integration-testing-annotations-spring< /а>

Совершенно не ясно, что вы собираетесь тестировать, если нет контекста приложения для загрузки...

person Artem Bilan    schedule 08.06.2018
comment
Спасибо, что помогло. Я хочу издеваться над orderTransformer и orderService, поместить фиктивное сообщение и убедиться, что фиктивный порядок достигнут до конца потока. Как мне издеваться над orderTransformer и orderService? в основном это будет модульное тестирование всех условий, таких как фильтр в приведенном выше сценарии. - person nagendra; 11.06.2018
comment
.transform() и .handle() можно высмеивать с помощью substituteMessageHandlerFor(). Неважно, что такое OrderTransformer и OrderService - вы все равно высмеиваете целую MessageHandler для них. - person Artem Bilan; 11.06.2018
comment
с @ContextConfiguration(classes = OrderPersistFlow.class) он жалуется на зависимости для activeMQConnectionFactory, orderTransformer, orderService, но я хочу издеваться над всеми зависимостями - person nagendra; 11.06.2018
comment
Можно ли вынести эту историю в отдельную ветку SO? Не похоже, что ваша насмешливая проблема связана с вопросом здесь. Спасибо за понимание. - person Artem Bilan; 11.06.2018