其实这类文章网上已经有很多了,包括模拟private方法等,我在这里只是简单记录我自己在使用过程中,编写的能够跑得通的例子。
以我自己编写调用REST API的接口为例:
首先在单元测试类类名上加上注解:
@RunWith(PowerMockRunner.class)public class MyStaticTest {//TODO}
// @PrepareForTest指定需要模拟的静态方法所在的类 @PrepareForTest( { Client.class }) @Test public void testFailToCreateClient() { TargetTestClass c = PowerMockito.spy(new TargetTestClass()); // 指定要mock哪个静态类 PowerMockito.mockStatic(Client.class); Client client = PowerMockito.mock(Client.class); PowerMockito.when(Client.create()).thenReturn(client); PowerMockito.when(client.resource(Mockito.anyString())).thenThrow( new RuntimeException("模拟建立服务器连接抛异常")); try { c.handlerProcess(); Assert.fail(); } catch (Exception e) { e.printStackTrace(); Assert.assertTrue(e instanceof SocketRunTimeException); } }
以上代码是一个很简单的模拟静态方法的例子,有几个重点:
1、@PrepareForTest需要指定要模拟的静态方法所在的类(我原来一直这个地方没有写对,写成了TargetTestClass,导致我一直运行失败)
2、使用PowerMockito.mock(Client.class)再次指定要模拟哪个类
然后接下来的就和使用Mockito一样了