Comment android test de l'unité et de se moquer d'une méthode statique

Salut j'espère vraiment que vous pourrez m'aider, je me sens comme j'ai été en tirant sur mes cheveux pendant des jours.

Je suis en train d'écrire des tests unitaires pour une méthode A. Méthode d'Un appel d'une méthode statique B. je veux maquette statique de la méthode B.

Je sais que cela a été demandé avant, mais j'ai l'impression d'Android a évolué depuis, et il doit y avoir moyen de faire une telle tâche simple, sans ré-écrire les méthodes que je veux tester.

Voici un exemple, d'abord la méthode que je veux tester:

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

Suivant la méthode statique je veux maquette:

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

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

        return userid;
    }
}

Dans d'autres langues, c'est facile, mais je ne peux pas le faire fonctionner sous Android.
J'ai essayé de Mockito, mais il semble que les méthodes statiques ne sont pas pris en charge

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

Cette erreur

org.mockito.des exceptions.en abuser.MissingMethodInvocationException

J'ai essayé Powermock mais je ne suis pas complètement sûr de ce qui est supporté par Android. J'ai réussi à obtenir powermock exécute à l'aide d'androidCompile dans mon gradle fichier mais j'ai cette erreur:

D'erreur:échec de l'Exécution de la tâche:app:dexDebugAndroidTest'. com.android.l'ide.commun.processus.ProcessException:

Pour ne pas mentionner PowerMockito.mockStatic(HelperUtils.class); Ne retourne rien, donc je ne sais pas ce qui passe dans mon getUsername méthode!

Toute aide serait très appréciée.

Je n'ai pas de bonne réponse, mais je suis récemment allé autour de singletons et les classes statiques pour les remplacer par un localisateur de service modèle. Il fait facilement vérifiable et a pris quelques minutes pour chaque classe à convertir.
Je ne sais pas tellement à propos de la tester dans d'autres langues, mais en Java, static est l'ennemi de l'essai.
Vous pouvez avoir un coup d'oeil à PowerMock (github.com/jayway/powermock). C'est un framework de test vous permet de tester les cas difficiles.
PowerMockito donne juste PowerMock Mockito saveur de l'API, techniquement, ils font tous les deux la même

OriginalL'auteur James | 2015-08-18