Statyczna metoda obejścia Mockito do testowania

Muszę przetestować metodę handleIn () za pomocą Mockito.

Jednak kod musi wywołać ten starszy kod Util.getContextPDO, który jest metodą statyczną.

Zauważ, że w środowisku testowym to Util.getContextPDO zawsze zwraca wyjątek, a ja zamierzam ominąć to Util.getContextPDO () zawsze zwracając fikcyjne IPDO.

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;
  } 
}

Początkowo myślałem, że można to osiągnąć za pomocą spy () klasy „MyClass”, więc mogę wyszydzić wartość zwracaną przez getIPDO (). Poniżej znajduje się mój wstępny wysiłek przy użyciu szpiega ()

@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)));

}

Jednakżekiedy (handler2.getIPDO ()). thenReturn (pdo); rzuca wyjątek, którego chcę uniknąć (ponieważ handler2.getIPDO ()) wydaje się wywoływać prawdziwą metodę.

Jakiś pomysł na testowanie tej części kodu?

questionAnswers(3)

yourAnswerToTheQuestion