你好,我真的希望你能帮助我,感觉自己已经为此烦恼了好几天。
我正在尝试为方法A编写单元测试。 方法A调用一个静态方法B。 我想模拟静态方法B。
我知道这个问题以前被问过,但我认为Android已经成熟了,一定有一种方法可以完成这样简单的任务,而无需重新编写要测试的方法。
以下是一个示例,首先是我要测试的方法:
public String getUserName(Context context, HelperUtils helper) {
if(helper == null){
helper = new HelperUtils();
}
int currentUserId = helper.fetchUsernameFromInternet(context);
if (currentUserId == 1) {
return "Bob";
} else {
return "Unknown";
}
}
接下来我想要模拟的静态方法:
public class HelperUtils {
public static int fetchUsernameFromInternet(Context context) {
int userid = 0;
Log.i("HelperUtils ", "hello");
return userid;
}
}
在其他语言中,这很容易,但我就是无法在Android上使其正常工作。我已经尝试过Mockito,但它似乎不支持静态方法。HelperUtils helper = Mockito.mock(HelperUtils.class);
Mockito.when(helper.fetchUsernameFromInternet(getContext())).thenReturn(1);
这些错误
org.mockito.exceptions.misusing.MissingMethodInvocationException
我尝试了Powermock,但我不确定Android是否支持它。我设法通过gradle文件中的androidCompile让powermock运行,但是我收到了以下错误:
Error:Execution failed for task ':app:dexDebugAndroidTest'. com.android.ide.common.process.ProcessException:
更不用说 PowerMockito.mockStatic(HelperUtils.class);
没有返回任何内容,所以我不知道应该传入什么参数到我的getUsername方法!
任何帮助将非常感激。