@Test public void testLazyContainerWithDest() throws Exception { BeanFactory beanFactory = mock(BeanFactory.class); when(beanFactory.containsBean(IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME)) .thenReturn(true); ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.initialize(); when(beanFactory.getBean(IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME, TaskScheduler.class)) .thenReturn(scheduler); final JmsOutboundGateway gateway = new JmsOutboundGateway(); gateway.setBeanFactory(beanFactory); gateway.setConnectionFactory(getConnectionFactory()); gateway.setRequestDestination(requestQueue7); gateway.setReplyDestination(replyQueue7); gateway.setCorrelationKey("JMSCorrelationID"); gateway.setUseReplyContainer(true); gateway.setIdleReplyContainerTimeout(1, TimeUnit.SECONDS); gateway.setRequiresReply(true); gateway.setReceiveTimeout(20000); gateway.afterPropertiesSet(); gateway.start(); Executors.newSingleThreadExecutor() .execute( () -> { JmsTemplate template = new JmsTemplate(); template.setConnectionFactory(getConnectionFactory()); template.setReceiveTimeout(20000); receiveAndSend(template); receiveAndSend(template); }); assertNotNull(gateway.handleRequestMessage(new GenericMessage<String>("foo"))); DefaultMessageListenerContainer container = TestUtils.getPropertyValue( gateway, "replyContainer", DefaultMessageListenerContainer.class); int n = 0; while (n++ < 100 && container.isRunning()) { Thread.sleep(100); } assertFalse(container.isRunning()); assertNotNull(gateway.handleRequestMessage(new GenericMessage<String>("foo"))); assertTrue(container.isRunning()); gateway.stop(); assertFalse(container.isRunning()); scheduler.destroy(); }