Sometimes, methods do not return any value but still perform important actions. Mocking void methods helps us test code that depends on these actions without running the real method.
When a method changes data or state but returns nothing
When a method sends messages or logs information
When a method calls external systems but you want to avoid real calls
When you want to check if a void method was called correctly
When you want to simulate exceptions thrown by void methods
This test mocks a List object. It makes clear() do nothing and verifies it was called once. It also makes add("test") throw an exception and prints the exception message.
JUnit
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
import java.util.List;
public class VoidMethodMockTest {
@Test
void testVoidMethodMocking() {
List<String> mockList = mock(List.class);
// Mock clear() to do nothing
doNothing().when(mockList).clear();
// Call clear()
mockList.clear();
// Verify clear() was called once
verify(mockList, times(1)).clear();
// Mock add() to throw exception
doThrow(new RuntimeException("Add failed")).when(mockList).add("test");
try {
mockList.add("test");
} catch (RuntimeException e) {
System.out.println(e.getMessage());
}
}
}
OutputSuccess
Important Notes
Always verify that the void method was called if that matters for your test.
Use doAnswer() if you want to run custom code when the void method is called.
Summary
Void methods do not return values but can be mocked using doNothing() or doThrow().
Mocking void methods helps test code without running real side effects.
Always verify calls to void methods if your test depends on them.
Practice
(1/5)
1. What is the main purpose of mocking void methods in JUnit tests?
easy
A. To convert void methods into methods that return values
B. To control their behavior and verify interactions without executing actual code
C. To automatically generate return values for void methods
D. To disable all tests that call void methods
Solution
Step 1: Understand void methods in tests
Void methods do not return values, so mocking helps control their side effects during tests.
Step 2: Purpose of mocking void methods
Mocking allows skipping actual execution and verifying if the method was called, without running real code.
Final Answer:
To control their behavior and verify interactions without executing actual code -> Option B
Quick Check:
Mock void methods = control behavior + verify calls [OK]
Hint: Mock void methods to control calls without running code [OK]
Common Mistakes:
Thinking void methods return values
Assuming mocking changes method return type
Believing mocking disables all tests
2. Which Mockito syntax correctly mocks a void method sendEmail() to do nothing when called?
easy
A. doNothing().when(mock).sendEmail();
B. verify(mock).doNothing().sendEmail();
C. mock.sendEmail().doNothing();
D. when(mock.sendEmail()).thenReturn(null);
Solution
Step 1: Recall Mockito syntax for void methods
Mockito uses doNothing().when(mock).method() to mock void methods doing nothing.
Step 2: Analyze options
doNothing().when(mock).sendEmail(); matches correct syntax; others misuse when() or verify().
Final Answer:
doNothing().when(mock).sendEmail(); -> Option A
Quick Check:
Mock void method to do nothing = doNothing().when() [OK]
Hint: Use doNothing().when(mock).voidMethod() to mock void methods [OK]