2012-07-12 40 views
6

Tôi đang cố gắng để giả lập một số lớp Mongo vì vậy mà tôi không cần một kết nối (thứ khá chuẩn) nhưng đoạn mã sau mang lại cho tôi những vấn đề:Mockito - 0 quẹt Dự kiến, 1 ghi (InvalidUseOfMatchersException)

when(dbCollection.find(isA(DBObject.class))).thenReturn(dbCursor); 

Chạy này có được là tôi:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
sử dụng không hợp lệ của quẹt luận!
0 quẹt mong đợi, 1 ghi:
tại ... GridFileManagerTest.beforeClass (GridFileManagerTest.java:67)

ngoại lệ này có thể xảy ra nếu quẹt được kết hợp với các giá trị nguyên:
// không đúng: someMethod (anyObject(), "Chuỗi thô");

Khi sử dụng đối sánh, tất cả đối số phải được cung cấp bởi đối sánh.
Ví dụ:
// chính xác:
someMethod (anyObject(), eq ("String by matcher"));

Để biết thêm thông tin, hãy xem javadoc cho lớp Đối sánh.

Nếu tôi được làm mặc dù điều này:

when(dbCollection.find(mock(DBObject.class))).thenReturn(dbCursor); 

nó không còn có vấn đề đó. Điều này dường như không hoàn thành những gì tôi muốn mặc dù - Tôi muốn trả về giá trị khi phương thức được gọi với một đối tượng kiểu DBObject.

Suy nghĩ?

+0

Xem phần '[EDIT]' của câu trả lời đầu tiên. Có lẽ bạn có cùng một vấn đề? http://stackoverflow.com/questions/10828843/powermockito-got-invaliduseofmatchersexception-when-use-matchers-mocking-static – bezmax

+0

Vậy DBCollection là một đối tượng giả lập Mockito? –

Trả lời

13

Tôi nghĩ kết quả của bạn tương thích với kết quả sẽ xảy ra nếu dbCollection không phải là Mockito-mock (hoặc phương pháp của bạn là tĩnh hoặc cuối cùng). Điều đó có nghĩa là một người so sánh đang được sử dụng mà không ai có thể được sử dụng; do đó "0 đối sánh được mong đợi, 1 được ghi lại".

+0

Đó là một mô hình (DBCollection.class) – Paul

+2

Nhưng (giả định đây là MongDB) nó trông giống như ['DBCollection # find()'] (http://api.mongodb.org/java/2.6/com/mongodb/DBCollection. html # find (com.mongodb.DBObject)) là cuối cùng, có cùng tác dụng. Bạn không thể thử các phương thức cuối cùng mà không sử dụng [PowerMock] (http://code.google.com/p/powermock/). –

+0

Nó thực sự là một phương pháp cuối cùng, nhờ làm rõ điều đó cho tôi! – Paul

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