La respuesta de puntos @edutesoy a la documentación de PowerMockito y menciones de burla constructor como una sugerencia, pero no menciona cómo aplicar eso a la problemática actual de la cuestión.
Aquí hay una solución basada en eso.Tomando el código de la pregunta: ¿
public class MyClass {
void method1{
MyObject obj1=new MyObject();
obj1.method1();
}
}
La siguiente prueba va a crear una maqueta de la clase ejemplo MiObjeto a través de la preparación de la clase que crea la instancia de ella (en este ejemplo yo estoy llamando MiClase) con PowerMock y dejar PowerMockito a trozo el constructor de la clase MiObjeto, a continuación, lo que le permite derivadas la MiObjeto metodo1 instancia() llamada:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
public class MyClassTest {
@Test
public void testMethod1() {
MyObject myObjectMock = mock(MyObject.class);
when(myObjectMock.method1()).thenReturn(<whatever you want to return>);
PowerMockito.whenNew(MyObject.class).withNoArguments().thenReturn(myObjectMock);
MyClass objectTested = new MyClass();
objectTested.method1();
... // your assertions or verification here
}
}
Con que su metodo1 interna() devolverá lo que quiere.
Si te gusta los de una sola línea que puede hacer el código más corto mediante la creación de la maqueta y la línea de código auxiliar:
MyObject myObjectMock = when(mock(MyObject.class).method1()).thenReturn(<whatever you want>).getMock();
Tenga en cuenta, pero para uso futuro utilizaré PowerMock – Xoke
@edutesoy ¿Puede escribir el código completo? No puedo entender tu idea. No veo la relación entre la burla del constructor y la burla de la variabli local. – gstackoverflow
Problema con este enfoque si uso EclEmma para la cobertura del código es que EclEmma da una cobertura de código del 0% para MyClass si agrego MyClass.class en @PrepareForTest en lugar de la cobertura del código real. Creo que esto es una limitación o error con la herramienta EclEmma. Alguna idea para superar este problema? –