PowerMock: как выполнить функцию EasyPock для ожидаемого вызова () для Mockito? - PullRequest
2 голосов
/ 27 февраля 2012

PowerMock предоставляет метод expectPrivate для моделирования частных методов, однако он появляется только в EasyMock api , а не в Mockito API .

Итак, есть ли аналог PowerMockito? Я предполагаю не потому что я не нашел это и из-за этой записи вики . но это на самом деле не мешает PowerMockito обойти это. Итак, я спрашиваю это в основном для подтверждения, и, поскольку я думаю, что это будет полезно для других.

1 Ответ

4 голосов
/ 27 февраля 2012

PowerMockito также предоставляет способы для имитации частных методов из API :

<T> WithOrWithoutExpectedArguments<T> when(Object instance, Method method) 
Expect calls to private methods.


verifyPrivate(Object object, org.mockito.verification.VerificationMode verificationMode) 
      Verify a private method invocation with a given verification mode.

Существует множество других подписей описанного выше типа.

Пример:

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;

import static org.mockito.Matchers.eq;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Foo.class)
public class SimpleTest {

    @Test
    public void testHello() throws Exception {
        Foo foo = PowerMockito.spy(new Foo());
        foo.sayHello();
        PowerMockito.verifyPrivate(foo).invoke("hello", eq("User"));
    }
}

class Foo {
    public void sayHello() {
        System.out.println(hello("User"));
    }

    private String hello(String user) {
        return "Hello " + user;
    }
}
...