mockito貌似不支持对静态函数对mock,所以引进“powermock"
1:maven配置
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>1.10.19</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>1.6.5</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>1.6.5</version> <scope>test</scope> </dependency>
2:静态函数伪代码
public class HttpUtils {
public static String doXMLPostSpecifyEncode(String url, String xmlStr, String contentEncodeStr) throws Exception { return "bababa"; }
}
public class Httpclient {
public String call(String url, String xmlStr)
{
return HttpUtils.doXMLPostSpecifyEncode(url,xmlStr,"utf-8");
}
}
3:单元测试
@RunWith(PowerMockRunner.class) @PrepareForTest({HttpUtils.class}) @PowerMockIgnore("javax.management.*") @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class STest
{
@Test
public void test03Notice() throws Exception {
String url = "*****.com/api/xxxx"
PowerMockito.mockStatic(HttpUtils.class);
PowerMockito.
when(HttpUtils.doXMLPostSpecifyEncode(Matchers.eq(url), anyString(), anyString())).thenReturn("cccc");
new Httpclient().call(url, "mockdata");
}
}
ps:标红加粗的参数,不能直接传入url,需要做一个matchers.eq("")