我有一个Junit测试来测试jms消息发送。我使用Spring jmsTemplate来完成这个任务。在下面的代码中,我想检查JMS模板是否调用了send message,而不管传递的actuall参数的值是什么。
我的publisher方法使用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));
但是当我被处决的时候
组织。模拟。异常。误用。无效使用匹配器异常:参数匹配器的使用无效!....
原因是由于 Mockito.any(MessageCreator.class),但是否有方法测试我的发送方法是否在MessageCreator中未创建实际对象的情况下执行。
更新是否有方法检查我的 * 会话。createObjectMessage(dialogueServiceResponse)* 是否也被调用
6条答案
按热度按时间a1o7rhls1#
我想剩下的信息会告诉你问题是什么,当你为一个参数使用参数匹配器时,所有其他参数也必须使用参数匹配器:
ni65a41a2#
供将来的读者使用。这将为您节省大量时间。
我们不能同时使用参数匹配器和原始值。
ghg1uchk3#
我认为你不能在stubbing之外使用参数匹配器。我也得到了同样的错误,但是当我返回时,我必须用新的
string()
代替Mockito.anyString()
,错误就消失了。例如:m1m5dgzv4#
我知道这个问题是关于Java代码的,但我还是要分享这个问题,因为我们在Scala中也使用Mockito。
我从下面模拟Play.api configurations的代码中抛出了这个异常
在Scala中,方法可以有Implicit parameters配置。get方法有一个显式参数和一个隐式参数。我传递了一个模拟对象,当抛出异常时,我想知道发生了什么,因为我没有混合参数和模拟,***结果我不得不也向隐式参数传递模拟,这解决了问题。
rm5edbpk5#
我看到这个错误是关于不匹配的参数数量,尽管有正确的数量...
我意识到这是因为被stubbed的方法是静态的,当我把它转换成非静态的,它就像预期的那样工作。
mqkwyuun6#
只需使用
eq
Package String值错误
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers!
正确