为什么 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
    }
}