Mockito - Недопустимое использование аргументов

21

У меня есть тест Junit, который тестирует отправку сообщений jms. Я использую Spring jmsTemplate для этого. Здесь, как и в следующем коде, я хочу проверить, вызвал ли шаблон JMS сообщение отправки независимо от того, что это такое в значениях передаваемых параметров возбуждения.

мой метод издателя использует метод jmsTemplate для отправки, который выглядит следующим образом.

jmsTemplate.send(jmsQueueProperties.getProperty(key), new MessageCreator()
{
    public Message createMessage(Session session) throws JMSException
    {
        ObjectMessage obj = session.createObjectMessage(dialogueServiceResponse);
        return obj;
}
});

в моих тестах.

JmsTemplate mockTemplate = Mockito.mock(JmsTemplate.class);
...
publisher.publishServiceMessage(response);
....
Mockito.verify(mockTemplate, 
    Mockito.times(1)).send("appointment.queue", 
        Mockito.any(MessageCreator.class));

Но когда в выполнении я получаю

  

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: недопустимое использование аргументов!   ....

Причина связана с Mockito.any (MessageCreator.class) , но нет способа проверить, что мой метод отправки выполняется, не создавая фактического объекта в MessageCreator.

Обновление И есть ли способ проверить мой session.createObjectMessage (dialogServiceResponse) также вызывается

    
задан kuhajeyan 09.05.2013 в 11:05
источник
  • макет и проверка не работают хорошо вместе. Вам нужно создать объект-шпион для класса, для которого вы хотите выполнить эти проверки, а не просто издеваться над ним. –  3xil3 09.05.2013 в 12:14

1 ответ

47

Я думаю, что остальная часть сообщения говорит вам, в чем проблема. Когда вы используете аргумент-аргумент для одного из аргументов, все остальные аргументы должны также использовать сопоставление аргументов:

Mockito.verify(mockTemplate, Mockito.times(1)).send(
    Mockito.eq("appointment.queue"), 
    Mockito.any(MessageCreator.class));
    
ответ дан JB Nizet 09.05.2013 в 12:35
источник
  • Спасибо. Да. что помогло разобраться в проблеме. но как насчет того, хочу ли я проверить вызов session.createObjectMessage (dialogServiceResponse)? –  kuhajeyan 09.05.2013 в 13:27
  • Вам, вероятно, придется использовать настоящий экземпляр JmsTemplate с посмеянным сеансом для этого. Или вы можете экрнализировать создание сообщения на другой метод, и unit проверит этот метод. –  JB Nizet 09.05.2013 в 13:43