Да, это так.
Вот мои зависимости:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.28.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>2.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.2</version>
<scope>test</scope>
</dependency>
Тестируемый класс:
public class A {
private void _test(){
}
public void test(){
for (int i = 0; i < 10; i++) {
_test();
}
}
}
Мой Junit:
@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class})
public class ATest {
private A a;
public ATest() {
}
@Before
public void setUp() {
a = PowerMockito.spy(new A());
}
/**
* Test of test method, of class A.
*/
@Test
public void testTest() throws Exception {
a.test();
PowerMockito.verifyPrivate(a, Mockito.times(10)).invoke("_test");
}
}
Но использование powermockito имеет недостатки:
- вы не можете контролировать покрытие с помощью инструмента, такого как Jacoco и на лету.
- возможно, вы разрабатываете сложный для тестирования дизайн: вам следует использовать это только если вы работаете по наследству и невозможно изменить код