Я сделал небольшой пример моего кода, чтобы проиллюстрировать эту проблемуИспользование мощности Mockito для подавления личное статический метод
public class SiteTranslator {
Integer id;
//Other fields
}
public class SiteUtil {
private static SiteTranslator siteTranslator = getSiteTranslator();
private static SiteTranslator getSiteTranslator()
{
SiteTranslator siteTranslator;
//Logic involving network call
return siteTranslator;
}
private static String getEnvironment()
{
String env = "";
//Logic
return env;
}
public static int getParent(int siteId)
{
int parentId = 0;
//Logic using siteTranslator from getSiteTranslator()
return parentId;
}
}
public class SiteUtilTest {
@Test
public void test1()
{
try
{
PowerMockito.suppress(SiteUtil.class.getMethod("getSiteTranslator"));
BDDMockito.given(SiteUtil.getParent(1)).willReturn(6);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Объект SiteTranslator мы получаем от getSiteTranslator() метод используется моей общественной функции GetParent() , Поскольку для getSiteTranslator() требуется сетевой вызов, его необходимо подавить. Я же получаю следующую ошибку
java.lang.NoSuchMethodException: SiteUtil.getSiteTranslator()
Я считаю, что проблема в том, что я пытаюсь издеваться личным статической функции. Однако я не могу изменить это публично. Есть ли способ издеваться над кодом в его текущем состоянии.
Возможный дубликат [Возможно ли частичное издевательство над частными статическими методами в PowerMock?] (Http://stackoverflow.com/questions/9719919/is-it-possible-to-use-partial-mocking-for -private-static-methods-in-powermock) – Turing85