使用PowerMock模拟静态方法

其实这类文章网上已经有很多了,包括模拟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一样了


你可能感兴趣的:(java,Powermock,单元测试)