
Overcoming Mockito Challenges: Mocking a Method Call from a Superclass
Mockito, a Java mocking framework, provides a powerful tool for isolating method calls during testing. However, certain scenarios require mocking only specific calls, particularly when dealing with inheritance.
Consider the following class hierarchy:
<code class="java">class BaseService {
public void save() {...}
}
public Childservice extends BaseService {
public void save(){
//some code
super.save();
}
} </code>The goal is to mock only the call to super.save() in the ChildService class, leaving the original method invocation intact for the first call.
One approach involves strategically using Mockito's spy() method to create a mock of the ChildService class. By stubbing the validate() method of the BaseService class, which is called in super.save(), we effectively prevent the unwanted method call:
<code class="java">class BaseService {
public void validate(){
fail(" I must not be called");
}
public void save(){
//Save method of super will still be called.
validate();
}
}
class ChildService extends BaseService{
public void load(){}
public void save(){
super.save();
load();
}
}
@Test
public void testSave() {
ChildService classToTest = Mockito.spy(new ChildService());
// Prevent/stub logic in super.save()
Mockito.doNothing().when((BaseService)classToTest).validate();
// When
classToTest.save();
// Then
verify(classToTest).load();
}</code>This approach effectively isolates the call to super.save() while allowing the original method invocation for the first call. It ensures that the test focuses specifically on the desired method under scrutiny.
The above is the detailed content of How to Mock a Method Call from a Superclass with Mockito: A Practical Guide. For more information, please follow other related articles on the PHP Chinese website!
What language is generally used to write vscode?
How to display two divs side by side
What is the core of a database system?
What private information will Douyin's close friends see?
Which company does Android system belong to?
How to calculate the factorial of a number in python
How to make an iso file
How to switch between full-width and half-width