クラスの 1 つで Collections.shuffle() メソッドが呼び出されたことを確認しようとしています。PowerMock with Mockito に関する (小さな) ドキュメントを読み、この問題を扱った他の SO の質問を読み、解決できませんでした。
@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.
私は何を間違っていますか?
ありがとう
編集: 以下の提案に従って、次のことを試しましたが、同じエラーが発生します。
@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));
}
}