0
0
JUnittesting~5 mins

@Spy for partial mocking in JUnit - Cheat Sheet & Quick Revision

Choose your learning style9 modes available
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?
ACreates a full mock where all methods do nothing by default
BCreates a partial mock that calls real methods unless stubbed
CCreates a new instance of the class without mocking
DAutomatically verifies all method calls
Which statement is true about @Spy and @Mock?
A@Spy calls real methods by default; @Mock does not
B@Mock calls real methods by default; @Spy does not
CBoth call real methods by default
DNeither can be used with JUnit
If you stub a method on a @Spy object, what happens when that method is called?
AThe stubbed value is returned instead of calling the real method
BThe real method is always called ignoring the stub
CAn exception is thrown
DThe method call is ignored
Which of these is a good use case for @Spy?
AWhen you want to disable all method calls
BWhen you want to mock an interface with no implementation
CWhen you want to create a new object without mocking
DWhen you want to test real behavior but control some methods
In the example: @Spy List<String> spyList = new ArrayList<>(); spyList.add("one"); What will spyList.size() return?
AThrows an exception
B0
C1
DDepends on stubbing
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.