Mockito: Trying to spy on method is calling the original method
java, junit, mockito
Solution
Let me quote the official documentation:
Important gotcha on spying real objects!
Sometimes it's impossible to use when(Object) for stubbing spies. Example:
List list = new LinkedList();
List spy = spy(list);
// Impossible: real method is called so spy.get(0) throws IndexOutOfBoundsException (the list is yet empty)
when(spy.get(0)).thenReturn("foo");
// You have to use doReturn() for stubbing
doReturn("foo").when(spy).get(0);
In your case it goes something like:
doReturn(resultsIWant).when(myClassSpy).method1();
Problem
I'm using Mockito 1.9.0. I want mock the behaviour for a single method of a class in a JUnit test, so I have ``` final MyClass myClassSpy = Mockito.spy(myInstance); Mockito.when(myClassSpy.method1()).thenReturn(myResults); ``` The problem is, in the second line, `myClassSpy.method1()` is actually getting called, resulting in an exception. The only reason I'm using mocks is so that later, whenever `myClassSpy.method1()` is called, the real method won't be called and the `myResults` object will be returned. `MyClass` is an interface and `myInstance` is an implementation of that, if that matters. What do I need to do to correct this spying behaviour?