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.