Como testar a unidade do Android e zombar de um método estático

Olá, eu realmente espero que você possa me ajudar, sinto que estou puxando meu cabelo há dias.

Estou tentando escrever testes de unidade para um método A. O método A chama um método estático B. Quero zombar do método estático B.

Sei que isso já foi perguntado antes, mas acho que o Android amadureceu desde então e deve haver uma maneira de executar uma tarefa tão simples sem reescrever os métodos que quero testar.

Aqui está um exemplo, primeiro o método que eu quero testar:

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";
    }
}

Em seguida, o método estático que quero zombar:

public class HelperUtils {
    public static int fetchUsernameFromInternet(Context context) {
        int userid = 0;

        Log.i("HelperUtils ", "hello");

        return userid;
    }
}

Em outros idiomas, isso é tão fácil, mas simplesmente não consigo fazê-lo funcionar no Android. Eu tentei o Mockito, mas parece que métodos estáticos não são suportados

HelperUtils helper = Mockito.mock(HelperUtils.class);
Mockito.when(helper.fetchUsernameFromInternet(getContext())).thenReturn(1);

Este erros

org.mockito.exceptions.misusing.MissingMethodInvocationException

Eu tentei o Powermock, mas não tenho certeza se isso é compatível com o Android. Eu consegui rodar o powermock usando androidCompile no meu arquivo gradle, mas recebi este erro:

Erro: falha na execução da tarefa ': app: dexDebugAndroidTest'. com.android.ide.common.process.ProcessException:

Para não mencionarPowerMockito.mockStatic(HelperUtils.class); Não retorna nada, então não sei o que passar para o meu método getUsername!

Qualquer ajuda seria muito apreciada.

questionAnswers(2)

yourAnswerToTheQuestion