你好,我尝试为我的Publisher类编写测试,它使用JMSTemplate将消息发布到IBM队列,我的测试如下。测试无法执行mock jmsTemplate方法convertAndSend()。不知道我做错了什么,但我找不到任何对测试发布者的支持,因为它在Spring Framework中为其他消息代理(如带有消息收集器的rabbitMQ)提供。
下面是我的测试代码:
'''
@SpringBootTest
@DirtiesContext
public class EventPublisherTest {
EventPublisher eventPublisher;
JmsTemplate jmsTemplate;
MessageCreator messageCreator;
Session mockSession;
@Before
public void setup() {
eventPublisher = Mockito.mock(EventPublisher.class);
jmsTemplate = Mockito.mock(JmsTemplate.class);
messageCreator = Mockito.mock(MessageCreator.class);
mockSession = Mockito.mock(Session.class);
}
@Test
public void testPublishEvent_PublishingMessage_Success() throws JMSException {
Mockito.when(mockSession.createTextMessage(Mockito.anyString())).thenReturn(Mockito.any());
Mockito.doAnswer(new Answer<Message>() {
@Override
public Message answer(InvocationOnMock invocation) throws Throwable {
final Object[] args = invocation.getArguments();
final MessageCreator arg = (MessageCreator)args[0];
return arg.createMessage(mockSession);
}
}).when(jmsTemplate).convertAndSend(Mockito.anyString());
eventPublisher.publishEvent(MessageBuilder.withPayload("mockMessage").build());
Mockito.verify(jmsTemplate, Mockito.times(1))
.convertAndSend(Mockito.anyString());
}
'''
1条答案
按热度按时间qxgroojn1#
你只有这个
eventPublisher = Mockito.mock(EventPublisher.class);
,然后没有任何stub用于publishEvent()
方法调用,以与jmsTemplate
建立可能的连接。JmsTemplate
没有太多的模拟测试,因为在大多数情况下,我们针对嵌入式JMS代理(如ActiveMQ)进行测试。我也看到你的
Answer
是不相关的,你存根:因此,
InvocationOnMock
可能只有您发送的一个字符串,而convertAndSend()
中不包含任何MessageCreator
。我不确定您对这个单元测试的期望是什么,但目前它是错误的,肯定不能工作。
顺便说一句,这与Spring Integration无关。请注意,下次当你为问题选择标签时要小心。