According to https://groups.google.com/forum/?fromgroups#!topic/mockito/9WUvkhZUy90, you should rephrase your
when(bar.getFoo()).thenReturn(fooBar)
to
doReturn(fooBar).when(bar).getFoo()
Another reason for similar error message is trying to mock a final
method. One shouldn't attempt to mock final methods (see Final method mocking).
I have also confronted the error in a multi-threaded test. Answer by gna worked in that case.
Very interested problem. In my case this problem was caused when I tried to debug my tests on this similar line:
Boolean fooBar;
when(bar.getFoo()).thenReturn(fooBar);
The important note is that the tests were running correctly without debugging.
In any way, when I replaced above code with below code snippet then I was able to debug the problem line without problems.
doReturn(fooBar).when(bar).getFoo();
For me this meant I was running this:
a = Mockito.mock(SomeClass.class);
b = new RealClass();
when(b.method1(a)).thenReturn(c);
// within this method1, it calls param1.method2() -- note, b is not a spy or mock
So what was happening is that mockito was detecting that a.method2()
was being called, and telling me I couldn't return c
from a.method2()
which is wrong.
Fix: use the doReturn(c).when(b).method1(a)
style syntax (instead of when(b.method1(a)).thenReturn(c);
), which will help you discover the hidden bug more concisely and quickly.
Or in this particular case, after doing that it started showing the more accurate "NotAMockException", and I changed it to not longer try to set a return value from a non-mock object.
I recently had this issue. The problem was that the method I was trying to mock had no access modifier. Adding public solved the problem.
I had this error because in my test I had two expectations, one on a mock and one on concrete type
MyClass cls = new MyClass();
MyClass cls2 = Mockito.mock(Myclass.class);
when(foo.bar(cls)).thenReturn(); // cls is not actually a mock
when(foo.baz(cls2)).thenReturn();
I fixed it by changing cls to be a mock as well
In my case the problem was caused by trying to mock a static method and forgetting to call mockStatic
on the class. Also I forgot to include the class into the @PrepareForTest()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With