Potrzebuję przetestować metodę handleIn() za pomocą Mockito.Mockito pomija statyczną metodę testowania
Jednak kod musi wywoływać ten dotychczasowy kod Util.getContextPDO, który jest metodą statyczną.
Należy zauważyć, że w środowisku testowym ten plik Util.getContextPDO zawsze zwraca wyjątek i zamierzam ominąć ten plik Util.getContextPDO(), zawsze zwracając fałszywe 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 to achieveable za pomocą szpiega() klasy „MojaKlasa”, więc mogę kpić wartość zwracaną getIPDO(). Poniżej jest moja pierwsza próba z użyciem 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 kiedy (handler2.getIPDO()) thenReturn (PDO).; rzuca wyjątek, którego chcę uniknąć (ponieważ handler2.getIPDO()) wydaje się wywoływać prawdziwą metodę.
Każdy pomysł na testowanie tej części kodu?
Używamy ** PowerMock ** wraz z ** Mockito ** do wotk ze starszymi wersjami. To okazuje się takie proste, więc postanowiliśmy uniknąć ** PowerMock **, aby walczyć ze spuścizną bardziej skuteczną. –
"Jedynym" problemem z PowerMockiem jest to, że jesteś zmuszony do używania własnego testera, który nie zawsze jest opcją (podczas pisania Testy Android Robolectric, na przykład, które wymagają własnego biegacza robolectric) –