Как андроид юнит-тест и макет статического метода

Привет, я действительно надеюсь, что вы можете мне помочь. Я чувствую, что выдернул свои волосы в течение нескольких дней.

Я пытаюсь написать модульные тесты для метода 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!

Любая помощь будет очень ценится.

Ответы на вопрос(1)

Ваш ответ на вопрос