Próbuję sprawdzić, czy metoda Collections.shuffle() została wywołana w jednej z moich klas. Przeczytałem (małą) dokumentację na PowerMock z Mockito i przeczytałem inne pytania SO, które dotyczyły tego problemu i nie otrzymałem rozwiązania.Statyczne kpiny z PowerMock i Mockito nie działają
@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
}
}
Biorąc pod uwagę powyższy kod, oczekuję pozytywnego wyniku testu jednostkowego. Jednak test urządzenia kończy się następująco:
Wanted but not invoked java.util.Collections.shuffle([]);
Actually, there were zero interactions with this mock.
Co robię źle?
Dzięki
EDIT: Zgodnie z sugestią poniżej Próbowałem następujących, i uzyskać ten sam błąd.
@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));
}
}
Co stanie się, jeśli zwolnisz ograniczenie swojego matchera z 'anyListOf' na' any (List.class) '? Co się stanie, jeśli dodasz "ClassToTest" do adnotacji '@ PrepareForTest'? –