Recall & Review
beginner
What is the purpose of the @Spy annotation in JUnit testing?
The @Spy annotation is used to create a partial mock of an object. It allows you to call real methods unless they are stubbed, combining real behavior with mock control.
Click to reveal answer
beginner
How does @Spy differ from @Mock in JUnit?
@Mock creates a full mock where all methods are stubbed and do nothing unless specified. @Spy wraps a real object and calls real methods by default, allowing selective stubbing.
Click to reveal answer
intermediate
Show a simple example of using @Spy in a JUnit test.
@Spy
List<String> spyList = new ArrayList<>();
@Test
void testSpy() {
spyList.add("one");
verify(spyList).add("one");
assertEquals(1, spyList.size());
}
This test uses @Spy to partially mock an ArrayList, calling real methods but verifying interactions.
Click to reveal answer
intermediate
What happens if you stub a method on a @Spy object?
When you stub a method on a @Spy object, the stubbed method returns the specified value instead of calling the real method. Other methods still call real implementations.
Click to reveal answer
beginner
Why might you choose @Spy over @Mock in testing?
Use @Spy when you want to test real behavior but still control or verify some method calls. It helps when you want to partially mock complex objects without rewriting all behavior.
Click to reveal answer
What does the @Spy annotation do in JUnit?
✗ Incorrect
The @Spy annotation creates a partial mock that calls real methods unless you stub them.
Which statement is true about @Spy and @Mock?
✗ Incorrect
@Spy calls real methods unless stubbed; @Mock creates a full mock with no real method calls.
If you stub a method on a @Spy object, what happens when that method is called?
✗ Incorrect
Stubbing a method on a @Spy causes that method to return the stubbed value instead of calling the real method.
Which of these is a good use case for @Spy?
✗ Incorrect
@Spy is useful when you want to test real behavior but selectively control or verify some methods.
In the example: @Spy List<String> spyList = new ArrayList<>(); spyList.add("one"); What will spyList.size() return?
✗ Incorrect
Since @Spy calls real methods by default, adding "one" increases the list size to 1.
Explain how @Spy works for partial mocking in JUnit and when you would use it.
Think about mixing real method calls with mocked behavior.
You got /4 concepts.
Describe the difference between @Spy and @Mock annotations in JUnit testing.
Focus on default method call behavior.
You got /4 concepts.