Mockito bypass método estático para pruebas
Necesito probar el método handleIn () usando Mockito.
Sin embargo, el código debe llamar a este código heredado Util.getContextPDO, que es un método estático.
Tenga en cuenta que en el entorno de pruebas, este Util.getContextPDO siempre devuelve una excepción, y tengo la intención de omitir este Util.getContextPDO () siempre devolviendo un IPDO ficticio.
public class MyClass {
public IPDO getIPDO()
{
return Util.getContextPDO(); // note that Util.getContextPDO() is a static, not mockable.
}
public String handleIn(Object input) throws Throwable
{
String result = "";
IPDO pdo = getIPDO();
// some important business logic.
return result;
}
}
Inicialmente, pensé que esto era posible utilizando el espía () de la clase "MyClass", por lo que puedo burlarme del valor de retorno de getIPDO (). A continuación se muestra mi esfuerzo inicial con espía ()
@Test
public void testHandleIn() throws Exception
{
IPDO pdo = new PDODummy();
MyClass handler = new MyClass ();
MyClass handler2 = spy(handler);
when(handler2.getIPDO()).thenReturn(pdo);
PDOUtil.setPDO(pdo, LogicalFieldEnum.P_TX_CTGY, "test123");
IPDO pdoNew = handler2.getIPDO();
Assert.assertEquals("test123,(PDOUtil.getValueAsString(pdoNew, LogicalFieldEnum.P_TX_CTGY)));
}
Sin embargo, elwhen (handler2.getIPDO ()). thenReturn (pdo); está lanzando la excepción que quiero evitar (porque handler2.getIPDO ()) parece llamar al método real.
¿Alguna idea sobre cómo probar esta parte del código?