Как андроид юнит-тест и макет статического метода
Привет, я действительно надеюсь, что вы можете мне помочь. Я чувствую, что выдернул свои волосы в течение нескольких дней.
Я пытаюсь написать модульные тесты для метода 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. Мне удалось запустить PowerMock с помощью androidCompile в моем файле Gradle, но я получаю эту ошибку:
Ошибка: не удалось выполнить задачу ': app: dexDebugAndroidTest'. com.android.ide.common.process.ProcessException:
Не говоря уже оPowerMockito.mockStatic(HelperUtils.class);
Ничего не возвращает, поэтому я не знаю, что передать в мой метод getUsername!
Любая помощь будет очень ценится.