我需要使用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转轮) –