Mocking ein Spion Methode mit Mockito

Schreibe ich einen unit test für eine FizzConfigurator Klasse, aussieht:

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.
    }
}

Ich würde gerne schreiben ein einfaches unit-test-stubs, die doWidget(String,Config) Methode (so dass es nicht wirklich Feuer und hit-Datenbank), aber das erlaubt mir, mich überprüfen, dass der Aufruf doBuzz(String) endet die Ausführung doWidget. Mockito scheint, wie das richtige Werkzeug für den job hier.

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.
        }
    }
}

Diese scheint wie ein guter gameplan (für mich zumindest). Aber wenn ich tatsächlich gehe es code, ich bekomme die folgende compiler-Fehlermeldung auf der 2. Linie im test-Methode (die Mockito.when(...) Linie:

Dem Verfahren, wenn(T) in der Art Mockito ist nicht anwendbar für die Argumente (void)

Sehe ich, dass Mockito kann nicht verspotten eine Methode, die zurückgibt void. Also Frage ich:

  1. Bin ich nähert sich diesem test-setup korrekt? Oder gibt es eine bessere, Mockito-empfehlenswert, Art der Prüfung, die doBuzz Anrufe doWidget unter der Haube? Und
  2. Was kann ich dagegen tun mocking/stubbing doWidget wie es die meisten kritischen Methode meiner gesamten FizzConfigurator Klasse?
InformationsquelleAutor | 2013-02-04
Schreibe einen Kommentar