2015-10-10 3 views
1

Это ошибка Powermock или я делаю это неправильно?Powermock рассчитывает больше, чем на самом деле позвонить, когда подтвердил

Следующий тест должен пройти, но не с:

trackBugPartialMockCountMore(com.xiaomi.finddevice.test.testcase.PowerMockBug) 
org.mockito.exceptions.verification.TooManyActualInvocations: 
classToMock.foo(); 
Wanted 1 time: 
-> at com.xiaomi.finddevice.test.testcase.PowerMockBug.trackBugPartialMockCountMore(PowerMockBug.java:24) 
But was 3 times. Undesired invocation: 
-> at com.xiaomi.finddevice.test.testcase.PowerMockBug.trackBugPartialMockCountMore(PowerMockBug.java:22) 

Когда я удалить @PrepareForTest (ClassToMock.class), каждая вещь идет хорошо, и тест получить прошло.

import org.junit.Ignore; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

import static org.mockito.Mockito.verify; 
import static org.powermock.api.mockito.PowerMockito.mock; 
import static org.powermock.api.mockito.PowerMockito.when; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ClassToMock.class) 
public class PowerMockBug { 

    @Test 
    public void trackBugPartialMockCountMore() { 
     ClassToMock mock = mock(ClassToMock.class); 
     when(mock.foo()).thenCallRealMethod(); 

     mock.foo(); 

     verify(mock).foo(); 
    } 

} 


class ClassToMock { 
    public int foo() { return 0x10; } 
} 

версия: powermock-Mockito-JUnit-1.6.3

ответ

0

В вашем примере вы не должны использовать PowerMock, потому что вы не насмешливый/шпионит окончательный или статический метод. Вы можете безопасно удалить аннотации @RunWith и @PrepareForTest. Для ваших целей требуется только mockito.

Смежные вопросы