2013-05-09 35 views
19

Tôi có kiểm tra Junit đang kiểm tra gửi tin nhắn jms. Tôi đang sử dụng Spring jmsTemplate để làm điều này. Ở đây tôi như trong đoạn mã sau tôi muốn kiểm tra xem mẫu JMS có được gọi là tin nhắn gửi không phụ thuộc vào giá trị của các tham số actuall được truyền đi.Mockito - Sử dụng đối sánh đối sánh không hợp lệ

phương pháp xuất bản của tôi sử dụng jmsTemplate để gửi phương pháp trông giống như sau bên trong ..

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

trong các thử nghiệm của tôi ..

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

Nhưng khi trong việc thực hiện tôi nhận được

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Sử dụng đối sánh đối sánh không hợp lệ! ....

Nguyên nhân là do Mockito.any (MessageCreator.class), nhưng không có một cách để kiểm tra phương pháp gửi của tôi là nhận được thực hiện mà không cần tạo một đối tượng thực tế trong MessageCreator.

Cập nhật Và đó là một cách để kiểm tra tôi session.createObjectMessage (dialogueServiceResponse) là nhận được gọi là tốt

+0

giả lập và xác minh không hoạt động tốt với nhau. Những gì bạn cần là tạo một đối tượng gián điệp cho Lớp bạn muốn chạy các xác minh này thay vì chỉ chế nhạo nó. – 3xil3

Trả lời

45

Tôi nghĩ rằng phần còn lại của thông điệp cho bạn biết vấn đề là gì. Khi bạn sử dụng đối sánh đối sánh cho một trong các đối số, tất cả đối số khác cũng phải sử dụng đối sánh đối sánh:

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

Cảm ơn. Vâng. đã giúp sắp xếp vấn đề. nhưng nếu tôi muốn kiểm tra session.createObjectMessage (dialogServiceResponse) thì được gọi là gì? – kuhajeyan

+2

Bạn có lẽ sẽ phải sử dụng một thực thể JmsTemplate thực sự với một phiên giả lập để làm điều đó. Hoặc bạn có thể mở rộng việc tạo tin nhắn sang phương thức khác và đơn vị kiểm tra phương thức này. –

Các vấn đề liên quan