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?