【发布时间】:2013-05-03 17:08:21
【问题描述】:
我有一个正在测试 jms 消息发送的 Junit 测试。我正在使用 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(dialogueServiceResponse) 是否也被调用
【问题讨论】:
-
模拟和验证不能很好地协同工作。您需要为您希望运行这些验证的类创建一个间谍对象,而不是仅仅模拟它。
-
@3xil3 - 这是错误的。完全可以验证对 Mocked 对象的调用。
标签: unit-testing junit mockito