【发布时间】:2016-09-27 09:16:49
【问题描述】:
我用我的代码做了一个小例子来说明问题
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();
}
}
}
我们从 getSiteTranslator() 方法获得的 SiteTranslator 对象被我的公共函数 getParent() 使用。由于 getSiteTranslator() 需要网络调用,因此需要对其进行抑制。但是我收到以下错误
java.lang.NoSuchMethodException: SiteUtil.getSiteTranslator()
我认为问题在于我试图模拟一个私有静态函数。但是我无法将其更改为公开。有没有办法模拟当前状态的代码。
【问题讨论】: