2012-02-08 19 views
21

Tôi có một trường hợp thử nghiệm rất đơn giản đó là sử dụng Mockito và Spring framework thử nghiệm. Khi tôi làmMockito ngoại lệ - khi() yêu cầu một cuộc tranh cãi đó có phải là một lời gọi phương thức trên một giả

when(pcUserService.read("1")).thenReturn(pcUser); 

Tôi nhận ngoại lệ này.

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'. 
For example: 
    when(mock.getArticles()).thenReturn(articles); 

Also, this error might show up because: 
1. you stub either of: final/private/equals()/hashCode() methods. 
    Those methods *cannot* be stubbed/verified. 
2. inside when() you don't call method on mock but on some other object. 

    at com.project.cleaner.controller.test.PcUserControllerTest.shouldGetPcUser(PcUserControllerTest.java:93) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 

Tôi đã thử với các phương pháp khác nhau nhưng tiếp tục nhận được thông báo lỗi này. Tôi đang sử dụng Spring 3.1.0.RELEASE với Mockito. Hãy chia sẻ và hướng dẫn tôi đi đúng hướng.

+0

Tôi cũng gặp vấn đề tương tự, nhưng tôi đang sử dụng: @Autowired @ReplaceWithMock (beanName = "logDao") riêng LogDao logDaoMock; –

Trả lời

20

Bạn cần phải tạo ra một mô hình của pcUserService đầu tiên, và sau đó sử dụng mô hình đó.

PcUserService mock = org.mockito.Mockito.mock(PcUserService.class); 
when(mock.read("1")).thenReturn(pcUser); 
+0

Có, đã hoạt động. Cảm ơn :) – jsf

+0

Nhưng tôi không thể gỡ lỗi trong trường hợp đó. làm nó thực sự gọi phương thức đó? – eatSleepCode

+0

@eatSleepCode: phương thức REAL 'PcUserService.read' sẽ không bao giờ được gọi trong ví dụ này. Thay vào đó một Mockito Mock được gọi, và trở lại mô hình này 'pcUser' – Ralph

9

Trong trường hợp người khác trúng vấn đề này ....

Nó cũng có thể là trường hợp hình thức mà bạn đang cố gắng để thử ra, pcUserService.read, được khai báo là một phương pháp final. Từ những gì tôi đã nhận thấy điều này dường như gây ra vấn đề với Mockito.

0

Một giải pháp cho vấn đề này có thể là trong trường hợp một lớp thử nghiệm đang sử dụng PowerMockRunner, bạn có thể phải thêm lớp mà bạn đang mô phỏng vào danh sách, trong chú thích @PrepareForTest.

Ví dụ -

@PrepareForTest({ PcUserService.class })

0

Có một lý do có thể cho lỗi như vậy - đôi khi IDE thích tĩnh nhập Mockito.when() từ gói khác:

import static io.codearte.catchexception.shade.mockito.Mockito.when; 

vs

import static org.mockito.Mockito.when; //should normally use this one 

Vấn đề là 'khi' từ i Gói o.codearte tương thích với org.mockito.Mockito.any() trên mức biên dịch, nhưng không thành công trong thời gian chạy với thông báo lỗi chính xác tương tự.

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