我需要使用Mockito測試handleIn()方法。Mockito旁路靜態測試方法
但是代碼需要調用這個遺留代碼Util.getContextPDO這是一個靜態方法。
請注意,在測試環境中,此Util.getContextPDO總是返回Exception,並且我打算通過總是返回一個虛擬IPDO來繞過此Util.getContextPDO()。
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;
}
}
起初我以爲這achieveable使用間諜()類「MyClass的」,所以我可以嘲笑getIPDO的)的返回值(。下面是使用間諜()我最初的努力
@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)));
}
然而時(handler2.getIPDO())thenReturn(PDO)。拋出我想避免的異常(因爲handler2.getIPDO())似乎稱爲真正的方法。
關於如何測試這部分代碼的任何想法?
我們將** PowerMock **與** Mockito **一起使用,帶來傳統。這變得如此簡單,所以我們制定了規則,以避免** PowerMock **與傳統更有效的戰鬥 –
PowerMock的「唯一」問題是,你不得不使用自己的測試運行器,這並不總是一個選項(當寫Android Robolectric測試,例如,需要他們自己的robolectric轉輪) –