У меня есть код, отправляющий сообщения jms через Spring JMSTemplate. Для тестирования метода я использую Mockito.JMS Testing - JMSTemplate отправить не выполнено
Мой код выглядит следующим образом .... publishDialogueServiceMessage() ->
brokerUrl = jmsQueueProperties.getProperty(MessageRouterConstants.JMS_QUEUE_URL);
LOG.info("The broker url is : {}", brokerUrl);
jmsTemplate.send(jmsQueueProperties.getProperty(MessageRouterConstants.QUEUE), new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
ObjectMessage obj = session.createObjectMessage(serviceResponse);
messageSent = true;
return obj;
}
});
В коде выше, чтобы я установить логическую переменную так, чтобы проверить, что если сообщение отправлено
Мой тест выглядит следующий,
@Before
public void setUp() throws Exception {
connectionFactory = Mockito.spy(new ActiveMQConnectionFactory(
"vm://localhost?broker.persistent=false"));
conn = connectionFactory.createConnection();
conn.start();
}
@After
public void cleanUp() throws Exception{
conn.stop();
}
@Test
public void testPublishDialogueServiceMessage()
{
ServiceResponse response = Mockito.mock(
ServiceResponse.class, Mockito.withSettings()
.serializable());
JmsTemplate mockTemplate = Mockito.mock(JmsTemplate.class);
java.util.Properties p = Mockito.mock(java.util.Properties.class);
Mockito.when(p.getProperty(MessageRouterConstants.QUEUE))
.thenReturn("outbound.request.queue");
mockTemplate.setConnectionFactory(connectionFactory);
mockTemplate.setDeliveryPersistent(true);
mockTemplate.setSessionAcknowledgeMode(2);
mockTemplate.setSessionTransacted(true);
ReflectionTestUtils.setField(publisher, "jmsQueueProperties", p);
ReflectionTestUtils.setField(publisher, "jmsTemplate", mockTemplate);
// test
publisher.publishDialogueServiceMessage(response);
ArgumentCaptor<MessageCreator> msgCreator = ArgumentCaptor.forClass(MessageCreator.class);
Mockito.verify(p, Mockito.times(2))
.getProperty(Mockito.anyString());
Mockito.verify(mockTemplate, Mockito.times(1)).send(
Mockito.anyString(), Mockito.any(MessageCreator.class));
//MessageCreator msgCrt = Mockito.spy(msgCreator.getValue());
//Assert.notNull(msgCrt);
Assert.isTrue(publisher.isMessageSent());
}
В тесте i перед интересной проблемой publisher.isMessageSent() всегда возвращает мне FALSE, указывающую, что сообщение отправки не выполняется (?). но Mockito.verify (mockTemplate, Mockito.times (1)). отправить (Mockito.anyString(), Mockito.any (MessageCreator.class)); идет хорошо.
Мне интересно, в чем причина того, что моя переменная messageSent не установлена. Может кто-нибудь пролить свет, что я могу делать неправильно.
@JonhB Спасибо, Джон. Это помогает мне. – kuhajeyan