web-dev-qa-db-fra.com

Mockito - Utilisation incorrecte des égaliseurs d'arguments

J'ai un test Junit qui teste l'envoi de messages jms. J'utilise Spring jmsTemplate pour ce faire. Ici, comme dans le code suivant, je veux vérifier si le modèle JMS a appelé un message d'envoi, quelle que soit la valeur des paramètres actuall qui sont passés.

ma méthode d'éditeur utilise le jmsTemplate pour envoyer la méthode ressemble à suivre à l'intérieur ..

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

dans Mes tests ..

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

Mais quand dans l'exécution je reçois

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: utilisation non valide des comparateurs d'arguments! ....

La cause est due à Mockito.any (MessageCreator.class) , mais n'y a-t-il pas un moyen de tester ma méthode d'envoi qui s'exécute sans créer un réel dans le MessageCreator.

pdate Et existe-t-il un moyen de vérifier ma session.createObjectMessage (dialogueServiceResponse) est également appelé

29
kuhajeyan

Je pense que le reste du message vous dit quel est le problème. Lorsque vous utilisez un adaptateur d'arguments pour l'un des arguments, tous les autres arguments doivent également utiliser un adaptateur d'arguments:

Mockito.verify(mockTemplate, Mockito.times(1)).send(
    Mockito.eq("appointment.queue"), 
    Mockito.any(MessageCreator.class));
67
JB Nizet

Je pense que vous ne pouvez pas utiliser d'argumenteurs en dehors du stubbing. J'ai également eu la même erreur mais quand je reviens, j'ai dû faire une nouvelle string() au lieu de Mockito.anyString() et l'erreur disparaît. Exemple:

Mockito.when(mockedBean.mockedMethod(Mockito.anyString(), 
                                     Mockito.anyInt(),
                                     Mockito.anyInt(),
                                     Mockito.anyInt(),
                                     Mockito.anyBoolean())).thenReturn(new String()); 
0
BruceWayne