Mockito: comment stub vide méthodes d'exécuter du code lorsqu'il est appelé

Je veux stub une classe de dépôt pour tester une autre classe (Titulaire de la classe) qui dispose d'un référentiel. Le référentiel de l'interface prend en charge les opérations CRUD, et a de nombreuses méthodes, mais mon test de l'unité sur le Titulaire de la classe seulement besoin de faire appel à deux d'entre eux. Le référentiel d'interface:

public interface IRepo {
    public void remove(String... sarr);

    public void add(String... sarr);

    //Lots of other methods I don't need now
}

Je veux créer un référentiel de fantaisie qui permet de stocker les cas, définir la logique de add et remove seulement, et fournissent également un moyen de vérifier ce qui est stocké sur elle après l'appel d'ajouter et de supprimer.

Si je fais:

IRepo repoMock = mock(IRepo.class);

Puis j'ai un muet objet qui ne fait rien sur chaque méthode. C'est OK, maintenant j'ai juste besoin de définir le comportement pour ajouter et supprimer.

Je pourrais créer un Set<String> et stub seulement ces deux méthodes pour travailler sur le plateau. Alors je vous instanciez un Titulaire qui a un IRepo, d'injecter de l'partiellement écrasé en moquer, et après l'exercice de la titulaire, vérifiez l'ensemble de vérifier qu'il contient ce qu'il devrait.

J'ai réussi à partiellement stub une méthode void comme remove à l'aide de la méthode dépréciée stubVoid:

Set<String> mySet = new HashSet<>();
stubVoid(repoMock).toAnswer(new Answer<Void>() {

    @Override
    public Void answer(InvocationOnMock invocation) throws Throwable {
        Object[] args = invocation.getArguments();
        String[] stringsToDelete = (String[]) args[0];
        mySet.removeAll(Arrays.asList(stringsToDelete));
        return null;
    }
}).on().remove(Matchers.<String>anyVararg());

Mais est obsolète, et il n'est pas beaucoup mieux que la création d'une mise en œuvre partielle pour IRepo. Est-il un meilleur moyen?

REMARQUE: Java 7 réponses seulement s'il vous plaît, cela devrait fonctionner sous Android.

OriginalL'auteur Mister Smith | 2015-08-21