2013-05-09 11 views
19

ich JUnit-Test, der Tests jms Nachricht sendet. Ich verwende Spring jmsTemplate, um dies zu tun. Hier möchte ich wie im folgenden Code prüfen, ob die JMS-Vorlage send-Nachricht aufgerufen hat, unabhängig davon, was in den Werten der tatsächlich übergebenen Parameter steht.Mockito - Unerlaubte Verwendung von Argumente Matcher

mein Verleger Methode verwendet das die jmsTemplate Verfahren wie innen folgt aussieht zu senden ..

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

in meinen Tests ..

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

Aber wenn in der Ausführung i erhalten

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Ungültige Verwendung von Argument Matcher! ....

Ursache ist aufgrund Mockito.any (MessageCreator.class), aber es ist eine Möglichkeit, meine Sendemethode zu testen ausgeführt wird immer in dem MessageCreator nicht da ein tatsächliches Objekt ohne zu schaffen.

aktualisieren Und gibt es eine Möglichkeit, meine session.createObjectMessage (dialogueServiceResponse) zu überprüfen ist

auch
+0

Mock und Verify funktionieren nicht gut zusammen. Was Sie brauchen, ist ein Spionageobjekt für die Klasse zu erstellen, mit der Sie diese Überprüfungen durchführen möchten, anstatt nur zu spotten. – 3xil3

Antwort

45

immer genannt denke ich, der Rest der Nachricht, die Sie sagt, was das Problem ist. Wenn Sie einen Argument-Matcher für eines der Argumente verwenden, müssen alle anderen Argumente auch einen Argument-Matcher verwenden:

+0

Danke. Ja. das half, das Problem zu lösen. Aber was ist, wenn ich session.createObjectMessage (dialogueServiceResponse) aufrufen möchte? – kuhajeyan

+2

Sie müssten wahrscheinlich eine echte JmsTemplate-Instanz mit einer verspotteten Sitzung dazu verwenden. Oder Sie können die Nachrichtenerstellung auf eine andere Methode externalisieren und Unit-Test diese Methode. –

Verwandte Themen