kuh*_*yan 33 junit unit-testing mockito
我有测试jms消息发送的Junit测试.我使用Spring jmsTemplate来做到这一点.在这里,我在下面的代码中,我想检查JMS模板是否已调用发送消息,无论它传递的actuall参数的值是什么.
我的发布者方法使用jmsTemplate发送方法看起来像跟在里面..
jmsTemplate.send(jmsQueueProperties.getProperty(key), new MessageCreator()
{
public Message createMessage(Session session) throws JMSException
{
ObjectMessage obj = session.createObjectMessage(dialogueServiceResponse);
return obj;
}
});
Run Code Online (Sandbox Code Playgroud)
在我的测试..
JmsTemplate mockTemplate = Mockito.mock(JmsTemplate.class);
...
publisher.publishServiceMessage(response);
....
Mockito.verify(mockTemplate,
Mockito.times(1)).send("appointment.queue",
Mockito.any(MessageCreator.class));
Run Code Online (Sandbox Code Playgroud)
但是当我执行时,我得到了
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:参数匹配器的使用无效!....
原因是由于Mockito.any(MessageCreator.class),但是没有办法测试我的send方法是在没有在MessageCreator中创建实际对象的情况下执行的.
更新 有没有办法检查我的session.createObjectMessage(dialogueServiceResponse)也被调用
JB *_*zet 71
我认为消息的其余部分会告诉您问题所在.当您为其中一个参数使用参数匹配器时,所有其他参数也必须使用参数匹配器:
Mockito.verify(mockTemplate, Mockito.times(1)).send(
Mockito.eq("appointment.queue"),
Mockito.any(MessageCreator.class));
Run Code Online (Sandbox Code Playgroud)
对于未来的读者。这将为您节省大量时间。
我们不能一起使用参数匹配器和原始/原始值。
when(fooService.getResult("string",any(MyClass.class))).thenReturn(1); // will give error
when(fooService.getResult(anyString(),any(MyClass.class))).thenReturn(1); // correct
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
61213 次 |
最近记录: |