Как мне смоделировать статический метод, который вызывает другие частные статические методы?
Как я могу смоделировать этот метод ниже, который вызывает другой частный статический метод?
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
как я подозреваю, это на самом деле вызывает эти частные методы.
1 ответ
В вашем коде when(testA.class, "orderPOST"...
издевается orderPost
метод.
Если вы хотите издеваться только retrieveOrder
метод и хотите игнорировать другие, ваш тестовый класс должен быть:
@RunWith(PowerMockRunner.class) // needed for powermock to work
// class that has static method and will be mocked must be in PrepareForTest
@PrepareForTest({ testA.class })
public class MyTestClass {
@Test
public void testRetrieveOrderMethod() throws Exception {
// JSON object you want to return
JSONObject order = new JSONObject();
order.put("orderId", "whatever value you want to test");
PowerMockito.spy(testA.class);
// retrieveOrder will return order object
PowerMockito.doReturn(order).when(testA.class, "retrieveOrder", Mockito.anyString());
// call static method
JSONObject retrieved = testA.retrieveOrder("12345");
// do the assertions you need with retrieved
}
}
Вы также можете изменить spy
а также doReturn
чтобы:
PowerMockito.mockStatic(testA.class);
Mockito.when(testA.retrieveOrder(Mockito.anyString())).thenReturn(order);
Оба будут работать одинаково.