Luego de de esta prolongada compilación de datos resolvimos este inconveniente que presentan algunos de nuestros lectores. Te compartimos la respuesta y nuestro deseo es serte de gran apoyo.
Solución:
Si realmente no tiene una opción para refactorizar, puede simular / eliminar todo en la llamada al súper método, por ejemplo
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();
No, Mockito no admite esto.
Puede que esta no sea la respuesta que está buscando, pero lo que está viendo es un síntoma de no aplicar el principio de diseño:
Favorecer la composición sobre la herencia
Si extrae una estrategia en lugar de extender una superclase, el problema desaparece.
Sin embargo, si no se le permite cambiar el código, pero debe probarlo de todos modos, y de esta manera incómoda, todavía hay esperanza. Con algunas herramientas de AOP (por ejemplo, AspectJ) puedes tejer código en el método de superclase y evitar su ejecución por completo (puaj). Esto no funciona si está usando proxies, debe usar la modificación del código de bytes (ya sea tejido en tiempo de carga o tejido en tiempo de compilación). Hay marcos de burla que también admiten este tipo de trucos, como PowerMock y PowerMockito.
Te sugiero que optes por la refactorización, pero si esa no es una opción, te divertirás mucho con la piratería.
Considere refactorizar el código del método ChildService.save () a un método diferente y pruebe ese nuevo método en lugar de probar ChildService.save (), de esta manera evitará llamadas innecesarias al súper método.
Ejemplo:
class BaseService
public void save() ...
public Childservice extends BaseService
public void save()
newMethod();
super.save();
public void newMethod()
//some codes