otro misma metodo mandar llamar dentro como clase java unit-testing junit mockito

java - metodo - ¿Cómo burlarse de otro método en la misma clase que está siendo probado?



como llamar a un metodo en java de la misma clase (2)

Estoy escribiendo el caso JUnit Test para una clase que tiene dos métodos methodA, methodB. Me gustaría burlarme de la llamada al métodoB del método A en mi caso de prueba. Estoy utilizando el espía en la clase que estoy probando, pero aún así se ejecuta el método B.

aquí está la clase

public class SomeClass { public Object methodA(Object object) { object=methodB(object); return object; } public Object methodB(Object object) { //do somthing return object; } }

aquí está la clase de prueba

@RunWith( org.powermock.modules.junit4.legacy.PowerMockRunner.class ) @PrepareForTest(SomeClass.class) public class SomeClassTest { private SomeClass var = null; @Before public void setUp() { var=new SomeClass(); } @After public void tearDown() { var= null; } @Test public void testMethodA_1() throws Exception { Object object =new Object(); SomeClass spy_var=PowerMockito.spy(var); PowerMockito.when(spy_var.methodB(object)).thenReturn(object); Object result = var.methodA(object); assertNotNull(result); } }

El método B todavía se llama, aunque me he burlado de él. Por favor, sugiero una solución con la forma correcta de burlar la llamada al método B del método A de la misma clase.


Me encontré con esto ayer, para los espías es mejor hacer doReturn (X) .when (espía) .method (any ())


Tomando este enfoque dará lugar a pruebas frágiles que tendrán que cambiar si refactoriza su clase bajo prueba. Recomiendo encarecidamente que intente hacer valer sus resultados de prueba esperados comprobando el estado de SomeClass lugar de confiar en los SomeClass .

Si realmente necesita burlarse del MethodB , esto es una indicación de que tal vez el comportamiento en el MethodB en realidad pertenece a una clase separada que luego podría probar la interacción de SomeClass con los SomeClass

Si realmente necesita hacer lo que pide entonces un ParcialMock es lo que quiere.

es probable que desee crear un simulacro parcial de alguna clase, pero indique que las llamadas a MethodA deben llamar al método real, pero luego se burlan de MethodB

Puede ver cómo usarlos en la documentación de Mockito

Como se indica en su documentación, aunque los simulacros parciales son un olor a código, aunque han identificado algunos casos de uso explícitos.