Spring boot JmsTemplate Тест Junit с Mockito - PullRequest
0 голосов
/ 01 августа 2020

Я изо всех сил пытаюсь заставить метод createMessage распознавать модульным тестом. Я не уверен, что мой подход правильный. Я новичок ie с Mockito.

Любая помощь приветствуется.

Вот мой класс

@Component
public class MyMessageSender {

    @Autowired private JmsTemplate jmsTemplate;

    public void sendMessage(String queueName, String message) {
        jmsTemplate.send(queueName, new MessageCreator() {
        
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage(message);
            }
        });
    }
}

Вот мой тестовый класс

@RunWith(MockitoJUnitRunner.class)
public class MyMessageSenderTest {

    @InjectMocks MyMessageSender myMessageSender;

    @Mock JmsTemplate jmsTemplate;

    @Test 
    public void testSend() throws JMSException {
        jmsTemplate.send(Mockito.anyString(), Mockito.any(MessageCreator.class));
        myMessageSender.sendMessage("test", "test");
    }

    @Test
    public void testCreateMessage() throws Exception {
        Session session = Mockito.mock(Session.class);
        TextMessage textMessage = Mockito.mock(TextMessage.class);
    
        textMessage.setText("hello");
        String RESPONSE_TEXT = "hello";
    
        // it raised java.lang.NullPointerException here
        assertEquals(session.createTextMessage(RESPONSE_TEXT).getText(), textMessage.getText());
    }
}

Итак, я добавил

Mockito.when(session.createTextMessage(RESPONSE_TEXT).thenReturn(message); 
 assertTrue((session.createTextMessage(RESPONSE_TEXT).getText().toString().length() > 1);

Он работает, но на основе покрытия кода jacoco не показывает, что он покрывает эту строку return session.createTextMessage(message); Пожалуйста, дайте мне знать, что я делаю не так.

...