为什么 JmsTemplate.receive 方法返回空对象?
why is JmsTemplate.receive method returning a null object?
我正在使用 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());
}
}
文件似乎没有在任何地方声明为 Spring bean。在其上添加 @Service
注释。
和
@Autowired JmsTemplate jmsTemplate
正如 Gary 所说,我们需要存根 session
createBytesMessage()
方法。
您可以使用匿名 class 来初始化 BytesMessage
接口。
ByteMessage
接口的初始化可以在调用session
mock createBytesMessage()
方法时给出,如下所示。
@ExtendsWith(MockitoExtension.class)
class Test {
@Mock
JmsSession session
@Test
void test() {
BytesMessage message = new BytesMessage() {
// implementation
};
doReturn(message).when(session).createBytesMessage();
// Your Test
}
}
我正在使用 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());
}
}
文件似乎没有在任何地方声明为 Spring bean。在其上添加 @Service
注释。
和
@Autowired JmsTemplate jmsTemplate
正如 Gary 所说,我们需要存根 session
createBytesMessage()
方法。
您可以使用匿名 class 来初始化 BytesMessage
接口。
ByteMessage
接口的初始化可以在调用session
mock createBytesMessage()
方法时给出,如下所示。
@ExtendsWith(MockitoExtension.class)
class Test {
@Mock
JmsSession session
@Test
void test() {
BytesMessage message = new BytesMessage() {
// implementation
};
doReturn(message).when(session).createBytesMessage();
// Your Test
}
}