【发布时间】:2017-10-08 12:36:43
【问题描述】:
如何在下面模拟这个调用另一个私有静态方法的方法?
public class testA {
public static JSONObject retrieveOrder(String orderId)
throws Exception {
String url = "/contract/";
JSONObject order = new JSONObject();
order.put("orderId", orderId);
return orderPOST(url, order);
}
private static orderPOST(String url, JSONObject order) {
return orderPOSTString(url, order.toString());
}
private static orderPOSTString (String url, String order) {
//do another call to method which will return JSONObject
}
}
我怎么能只模拟 retrieveOrder 方法,因为我不关心这些私有方法中的任何一个?至于那些私有的静态方法,我不能修改它们中的任何一个,所以必须按原样接受它们。
这是我的测试:
@Test
public void testRetrieveOrderMethod() throws Exception {
String url = "/contract/";
JSONObject order = new JSONObject();
order.put("orderId", orderId);
PowerMockito.spy(testA.class);
PowerMockito.doReturn(url, order.toString()).when(testA.class, "orderPOST", Matchers.any(), Matchers.any());
JSONObject retrieved = testA.retrieveOrder("12345");
}
如果我在这里遗漏了什么,请告诉我。我不断收到NullPointerException,因为我怀疑它实际上是在调用那些私有方法。
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example。
-
事情是:甚至你的被测类没有编译!这两个静态方法缺少返回类型。首先在这里提出合理的输入!并清楚说明你打算做什么。
标签: java unit-testing mockito powermockito