Mocking private-Methoden in der öffentlichen Methode mit PowerMock, Mockito, TestNG

Ich möchte schreiben Sie einen unit test für eine Klasse, die ich habe. Hat diese Klasse eine öffentliche Methode, und innerhalb der öffentlichen Methode Aufrufe von privaten Methoden in der gleichen Klasse. Ich möchte zu verspotten, die Aufrufe an diese privaten Methoden. Die Klasse ist ähnlich wie diese:

public class SomeClass {
    public int somePublicMethod(int num) {
        int num2 = somePrivateMethod1(num);
        int num3 = somePrivateMethod2(num);

        return num2 + num3;
    }

    private int somePrivateMethod1(int num) {
        return 2*num;
    }

    private int somePrivateMethod2(int num) {
        return 3*num;
    }
}

Für meine unit-test-ich bin versucht, PowerMock mit Mockito und TestNG. Hier ist mein Versuch, ein test, der tests somePublicMethod:

import static org.powermock.api.mockito.PowerMockito.doReturn;
import static org.powermock.api.mockito.PowerMockito.spy;

import org.powermock.core.classloader.annotations.PrepareForTest;
import org.testng.Assert;
import org.testng.annotations.Test;

@PrepareForTest(SomeClass.class)
public class SomeClassTest {

    @Test
    public void testSomePublicMethod() throws Exception {
        int num = 4;        

        SomeClass someClassSpy = spy(new SomeClass());

        doReturn(8).when(someClassSpy, "somePrivateMethod1", num);
        doReturn(12).when(someClassSpy, "somePrivateMethod2", num);

        int result = someClassSpy.somePublicMethod(num);

        Assert.assertEquals(result, 20);
    }
}

Wenn ich diesen test ausführen, bekomme ich eine Ausnahme und einige Hinweise:

FAILED: testSomePublicMethod
org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here:
-> at org.powermock.api.mockito.internal.PowerMockitoCore.doAnswer(PowerMockitoCore.java:31)

E.g. thenReturn() may be missing.
Examples of correct stubbing:
    when(mock.isOk()).thenReturn(true);
    when(mock.isOk()).thenThrow(exception);
    doThrow(exception).when(mock).someVoidMethod();
Hints:
 1. missing thenReturn()
 2. you are trying to stub a final method, you naughty developer!

Ist, habe ich mich auf einige Beispiele online, aber ich habe nicht gefunden eine mit PowerMock mit Mockito und TestNG speziell zu tun, was ich will. Kann mir jemand ein paar Tipps, was ich anders machen kann?

InformationsquelleAutor Thomas | 2012-05-09

Schreibe einen Kommentar