I have a very simple test case that is using Mockito and Spring Test framework. When I do
when(pcUserService.read("1")).thenReturn(pcUser);
I get this exception.
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)
I have tried with different methods but keep on getting this error message. I am using Spring 3.1.0.RELEASE with Mockito. Please share and guide me in the right direction.
In case others hit this issue....
It could also be the case that the method you are trying to mock out,
pcUserService.read
, is declared as afinal
method. From what I've noticed this appears to cause issues with Mockito.Another solution to this issue might be that in case of a test class that is using
PowerMockRunner
, you might have to add the class that you are mocking to the list, in@PrepareForTest
annotation.For instance -
@PrepareForTest({ PcUserService.class })
There's another possible reason for such error - sometimes IDE prefers to statically import Mockito.when() from another package:
vs
The thing is 'when' from io.codearte package is compliant with org.mockito.Mockito.any() on compilation level, but fails during runtime with that exact same error message.
You need to create a MOCK of pcUserService first, and then use that mock.
I had the same issue, the method that I was trying to mock it was a final method. I removed the modifier and it worked fine.
If you use Kotlin, you should know that methods are
final
by default. So writeopen fun
instead offun
. Thanks to @djkelly99 for a tip.