Я пытаюсь проверить, что метод Collections.shuffle() был вызван в одном из моих классов. Я прочитал (небольшую) документацию по PowerMock с Mockito и прочитал другие вопросы, которые касались этой проблемы, и не получил разрешения.Статические насмешки с PowerMock и Mockito не работают
@RunWith(PowerMockRunner.class)
@PrepareForTest(Collections.class)
public class MyTest {
@Test
public void testShuffle() {
PowerMockito.mockStatic(Collections.class);
PowerMockito.doCallRealMethod().when(Collections.class);
Collections.shuffle(Mockito.anyListOf(Something.class));
ClassToTest test = new ClassToTest();
test.doSomething();
PowerMockito.verifyStatic(); // Verify shuffle was called exactly once
Collections.shuffle(Mockito.anyListOf(Something.class));
}
}
public class ClassToTest {
private final List<Something> list;
// ...
public void doSomething() {
Collections.shuffle(list);
// do more stuff
}
}
Учитывая приведенный выше код, я ожидаю, что пройденный тест пройдет. Тем не менее, единичный тест не выполнен следующим образом:
Wanted but not invoked java.util.Collections.shuffle([]);
Actually, there were zero interactions with this mock.
Что я делаю неправильно?
Благодаря
EDIT: По предложению ниже я попытался следующий, и я получаю ту же ошибку.
@RunWith(PowerMockRunner.class)
@PrepareForTest(Collections.class)
public class MyTest {
@Test
public void testShuffle() {
PowerMockito.mockStatic(Collections.class);
ClassToTest test = new ClassToTest();
test.doSomething();
PowerMockito.verifyStatic(); // Verify shuffle was called exactly once
Collections.shuffle(Mockito.anyListOf(Something.class));
}
}
Что произойдет, если вы ослабляете ограничение на свой матчи от 'anyListOf' до' any (List.class) '? Что произойдет, если вы добавите «ClassToTest» в аннотацию '@ PrepareForTest'? –