Wie zum Hohn geschützt Unterklasse die geerbten Methode aus der abstrakten Klasse?

Wie zu verwenden Mockito oder PowerMock zu verspotten, eine protected-Methode, realisiert durch eine Unterklasse, aber geerbt von der abstrakten super-Klasse?

In anderen Worten, ich möchte testen "doSomething" - Methode, während die Verspottung der "doSomethingElse".

Abstrakten super-Klasse

public abstract class TypeA {

    public void doSomething() {     

        //Calls for subclass behavior
        doSomethingElse();      
    }

    protected abstract String doSomethingElse();

}

Unterklasse Umsetzung

public class TypeB extends TypeA {

    @Override
    protected String doSomethingElse() {
        return "this method needs to be mocked";
    }

}

Lösung

Antworten, die hier gegeben werden sind richtig und wird funktionieren, wenn alle beteiligten Klassen im gleichen Paket.

Aber wenn verschiedene Pakete beteiligt sind, ist eine option, um Benutzer PowerMock. Das folgende Beispiel funktionierte für mich. Natürlich könnte es andere Möglichkeiten, es zu tun, das ist eine, die funktioniert.

import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({ TypeB.class })
public class TestAbstract {

    @Test
    public void test_UsingPowerMock() throws Exception {
        //Spy a subclass using PowerMock
        TypeB b = PowerMockito.spy(new TypeB());
        String expected = "some value for mock";

        //Mock a method by its name using PowerMock again
        PowerMockito.doReturn(expected).when(b, "doSomethingElse");

        //Calls the 
        String actual = b.doSomething();
        assertEquals(expected, actual);     

    }
}

Hinweis: Tests mit Java 5, jUnit 4.11, Mockito 1.9.0 und PowerMock 1.4.12.

Dieser Ansatz gibt mir ein NullPointerException mit Java 8, JUnit 4.12 und PowerMock 1.6.4.

InformationsquelleAutor BonanzaOne | 2015-08-18

Schreibe einen Kommentar