PowerMockito löst NullPointerException aus, wenn versucht wird, eine private überladene Methode zu stoppen

Ich versuche (noch) zu prüfen, obbar(Alpha, Baz) namensbar(Xray, Baz) mit PowerMockito (alsbar(Xray, Baz) istprivate) - ohne das später aufzurufen, angesichts meiner MCVE-KlasseFoo unten. (Ich ging durch die gleiche Klassevorhi, mit allen Methoden inFoo Seinpublic - falls du ein Déjà Vu hast ...)

public class Foo {
    private String bar(Xray xray, Baz baz) {
        return "Xray";
    }

    private String bar(Zulu zulu, Baz baz) {
        return "Zulu";
    }

    public String bar(Alpha alpha, Baz baz) {
        if(alpha.get() instanceof Xray) {
            return bar((Xray)alpha.get(), baz);
        } else if(alpha.get() instanceof Zulu) {
            return bar((Zulu)alpha.get(), baz);
        } else {
            return null;
        }
    }
}

Wenn ich versuche, den folgenden Test auszuführen, erhalte ich eine NPE von PowerMock:

@RunWith(PowerMockRunner.class)
// @PrepareOnlyThisForTest(Foo.class) // we aren't looking at the byte code,, I think
public class FooTest {

    @Test
    public void testBar_callsBarWithXray() throws Exception {
        Baz baz = new Baz(); //POJOs
        Alpha alpha = new Alpha();
        alpha.set(new Xray());

        Foo foo = new Foo();
        Foo stub = spy(foo); // using Mockito, as it's neither final nor "not spyable"

        // NPE at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbing(PowerMockitoStubberImpl.java:67)
        PowerMockito.doReturn("ok").when(stub, "bar", Xray.class, Baz.class);

        stub.bar(alpha, baz);
        // Testing if bar(Xray, Baz) was called by bar(Alpha, Baz)
        PowerMockito.verifyPrivate(foo).invoke("bar", Xray.class, Baz.class);
        // Mockito's equivalent for a public method: verify(stub, times(1)).bar(any(Xray.class), any(Baz.class));
    }
}

Wenn ich den Stummel zu einem @ macPowerMockito.spy(foo) Bekomme ich einIllegalArgumentException: argument type mismatch at org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation(WhiteboxImpl.java:2014) stattdessen. (Es sprudelt in der gleichen Zeile wie die NPE.)

Ich verwende Mockito-Core 1.9.5, PowerMock 1.5.4 (Modul-Junit4 und API-Mockito) und JUnit 4.11.

Was muss ich ändern, um zu verhindern, dass die Ausnahmen ausgelöst werden? Wie kann ich diesen Test zum Laufen bringen? (AußertestenDa meine Klasse funktioniert, anstattWi ... ;-))

Antworten auf die Frage(2)

Ihre Antwort auf die Frage