Mockito - Недопустимое использование аргументов
У меня есть тест 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) также вызывается
Ответы
Ответ 1
Я думаю, что остальная часть сообщения говорит вам, в чем проблема. Когда вы используете аргумент-аргумент для одного из аргументов, все остальные аргументы должны также использовать сопоставление аргументов:
Mockito.verify(mockTemplate, Mockito.times(1)).send(
Mockito.eq("appointment.queue"),
Mockito.any(MessageCreator.class));
Ответ 2
Я думаю, что вы не можете использовать сопоставители аргументов вне заглушки. Я также получил ту же ошибку, но когда я возвращаюсь, мне пришлось сделать новую string()
вместо Mockito.anyString()
и ошибка исчезнет. Пример:
Mockito.when(mockedBean.mockedMethod(Mockito.anyString(),
Mockito.anyInt(),
Mockito.anyInt(),
Mockito.anyInt(),
Mockito.anyBoolean())).thenReturn(new String());