Estoy usando Mockito para pruebas unitarias y quiero omitir la ejecución de un método.
Me referí a este ticket Saltar ejecución de una línea usando Mockito . Aquí, asumo que los métodos doSomeTask() y createLink() están en diferentes clases. Pero en mi caso, ambos métodos están en la misma clase (ActualClass.java).
//Actual Class public class ActualClass{ //The method being tested public void method(){ //some business logic validate(param1, param2); //some business logic } public void validate(arg1, arg2){ //do something } } //Test class public class ActualClassTest{ @InjectMocks private ActualClass actualClassMock; @Test public void test_method(){ ActualClass actualClass = new ActualClass(); ActualClass spyActualClass = Mockito.spy(actualClass); // validate method creates a null pointer exception, due to some real time data fetch from elastic doNothing().when(spyActualClass).validate(Mockito.any(), Mockito.any()); actualClassMock.method(); } }Dado que surge una excepción de puntero nulo cuando se ejecuta el método de validación, estoy tratando de omitir la llamada al método espiando el objeto ActualClass como se indica en el ticket que mencioné anteriormente. Aún así, el tema no se resuelve. El método de validación se ejecuta y crea una excepción de puntero nulo debido a que no se puede cubrir el método de prueba real.
Entonces, ¿cómo omito la ejecución del método de validación () que está dentro de la misma clase?
En caso de dependencias externas, las siguientes dos anotaciones se pueden usar a la vez. @InjectMocks @Spy Esto realmente espiará el método original. Si el método que desea omitir existe en algún otro archivo, anote el objeto de la clase con @Spy en el que existe el método que se omitirá.
Siempre debe usar su clase espía cuando llame al method() .
@Test public void test_method(){ ActualClass spyActualClass = Mockito.spy(actualClassMock); doNothing().when(spyActualClass).validate(Mockito.any(), Mockito.any()); spyActualClass.method(); }En la práctica, en lugar de
actualClassMock.method();debes usar
spyActualClass.method();