2013-05-09 3 views
19

Ho un test Junit che sta testando l'invio di messaggi jms. Sto usando Spring jmsTemplate per farlo. Qui come nel codice seguente, voglio verificare se il modello JMS ha chiamato send message indipendentemente da cosa si trova nei valori dei parametri actuall che vengono passati.Mockito - Uso non valido degli argomenti corrispondenti

mio metodo editore utilizza il jmsTemplate per inviare metodo sembra seguente dentro ..

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

nel mio test ..

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

Ma quando nell'esecuzione ottengo

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: utilizzo non valido dei parametri di confronto degli argomenti! ....

causa è dovuta a Mockito.any (MessageCreator.class), ma non c'è un modo per testare il mio metodo di invio sta ottenendo eseguita senza creare un oggetto reale nel MessageCreator.

Aggiornamento E c'è un modo per controllare la mia session.createObjectMessage (dialogueServiceResponse) è sempre chiamato così

+0

simulare e non funzionare bene insieme. Quello di cui hai bisogno è creare un oggetto di spionaggio per la classe in cui desideri eseguire queste verifiche anziché limitarti a deriderlo. – 3xil3

risposta

45

credo che il resto del messaggio ti dice qual è il problema. Quando si utilizza un argomento per uno degli argomenti, tutti gli altri argomenti devono utilizzare anche un argomento corrispondente:

Mockito.verify(mockTemplate, Mockito.times(1)).send(
    Mockito.eq("appointment.queue"), 
    Mockito.any(MessageCreator.class)); 
+0

Grazie. Sì. questo ha aiutato a risolvere il problema. ma che cosa succede se voglio controllare session.createObjectMessage (dialogueServiceResponse) per essere chiamato? – kuhajeyan

+2

Probabilmente dovresti usare una vera istanza di JmsTemplate con una Session derisoria per farlo. O potresti esternalizzare la creazione del messaggio in un altro metodo e l'unità testare questo metodo. –