@Spy
It creates a real object and calls real method.
When we do not stub the method it calls the real method on the created spy object.
While @Mock creates a completely mock or fake object. It doesnt call the actual real method.
Note: spy Object created for interface using @Spy will be useless because you could not test the actual data on it.
@Spy ArrayList arrayList;
@Test
public void test_ArrayList_with_Spy_Annotation(){
arrayList.add("good");
arrayList.add("night");
Mockito.verify(arrayList).add("good");
Mockito.verify(arrayList).add("night");
}