私のクラスの1つでCollections.shuffle()メソッドが呼び出されたことを確認しようとしています。私はPowerMockのMockitoに関する(少しの)ドキュメントを読んで、この問題を扱った他のSOの質問を読んだが、解決は得られなかった。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: 私は次のことを試してみました、と私は同じエラーを取得するの下に提案を1として。
@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) 'に緩めるとどうなりますか? '@ PrepareForTest'アノテーションに' ClassToTest'を追加するとどうなりますか? –