Se moquant d'un Espion de la méthode avec Mockito

Je suis en train d'écrire un test unitaire pour un FizzConfigurator classe qui ressemble à:

public class FizzConfigurator {
    public void doFoo(String msg) {
        doWidget(msg, Config.ALWAYS);
    }

    public void doBar(String msg) {
        doWidget(msg, Config.NEVER);
    }

    public void doBuzz(String msg) {
        doWidget(msg, Config.SOMETIMES);
    }

    public void doWidget(String msg, Config cfg) {
        //Does a bunch of stuff and hits a database.
    }
}

Je voudrais écrire un test unitaire simple que les talons de la doWidget(String,Config) méthode (de sorte qu'il ne fait pas feu et touché la base de données), mais qui me permet de vérifier que l'appel doBuzz(String) se termine l'exécution de doWidget. Mockito semble être le bon outil pour le travail ici.

public class FizzConfiguratorTest {
    @Test
    public void callingDoBuzzAlsoCallsDoWidget() {
        FizzConfigurator fixture = Mockito.spy(new FizzConfigurator());
        Mockito.when(fixture.doWidget(Mockito.anyString(), Config.ALWAYS)).
            thenThrow(new RuntimeException());

        try {
            fixture.doBuzz("This should throw.");

            //We should never get here. Calling doBuzz should invoke our
            //stubbed doWidget, which throws an exception.
            Assert.fail();
        } catch(RuntimeException rte) {
            return; //Test passed.
        }
    }
}

Ce semble comme un bon plan de jeu (du moins pour moi). Mais quand je suis aller au code, j'obtiens l'erreur suivante compilateur sur la 2e ligne à l'intérieur de la méthode d'essai (le Mockito.when(...) ligne:

La méthode lorsque(T) dans le type de Mockito n'est pas applicable pour les arguments (void)

Je vois que Mockito ne peut pas se moquer d'une méthode qui retourne void. Alors je vous le demande:

  1. Suis-je aborder cette configuration de test correctement? Ou est-il un mieux, Mockito-recommandé, un moyen de vérifier que doBuzz appels doWidget sous le capot? Et
  2. Que puis-je faire au sujet de moqueries/stubbing doWidget que c'est le plus critique de la méthode de la totalité de mon FizzConfigurator classe?

OriginalL'auteur | 2013-02-04