为什么JmsTemplate.receive方法返回null对象



我使用Mockito创建模拟消息对象(以便测试ibmMqService),但jmsTemplate返回null

public class ImqMqServerTest {
@InjectMocks
IbmMqService ibmMqService;
@Mock
JmsTemplate jmsTemplate;
@Value("${ibm.mq.queue.response}")
String responseMq;
void receiveOrderResponseTest() throws JMSException {
jmsTemplate.send(responseMq, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
BytesMessage bytesMessage = session.createBytesMessage();
String msg = "Test";                                                                                                                                                                                                                                         
bytesMessage.writeBytes(msg.getBytes());
return bytesMessage;
}
});
Message message = jmsTemplate.receive(responseMq);
System.out.println(message.getJMSMessageID()); 
}
}

正如Gary所说,我们需要存根sessioncreateBytesMessage()方法。

您可以使用匿名类来初始化BytesMessage接口。

当调用sessionmockcreateBytesMessage()方法时,可以给出ByteMessage接口的初始化,如下所示。

@ExtendsWith(MockitoExtension.class)
class Test {
@Mock
JmsSession session

@Test
void test() {
BytesMessage message  = new BytesMessage() {
// implementation 
};
doReturn(message).when(session).createBytesMessage();

// Your Test
}
}

File似乎没有在任何地方被声明为Springbean。在其上添加@Service注释。和

@Autowired JmsTemplate jmsTemplate