Незважаючи на те, що Mockito може допомогти з написанням тестів, є певні речі, які він не призначений для виконання, а саме: імітація або тестування приватних, фінальних або статичних методів. Ось тут на допомогу приходить PowerMockito. PowerMockito розроблено для тестування приватних, кінцевих або статичних методів, оскільки використовує Java Reflection API.

Powermock дозволяє тестувати поганий код, не змінюючи його на хороший код. Уникнення powermock на ранній стадії покращить код, а не створить технічний борг через поганий код. Використання Powermock у великих програмах ускладнює тестування.

Mockito/JUnit підходить для модульного тестування більшої частини вашого коду, тоді як PowerMock корисний лише під час спроби перевірити код, який потребує додаткових функцій, таких як тестування остаточних/статичних блоків коду та приватних членів/методів.

PowerMock — це структура, яка розширює інші макетні бібліотеки, такі як EasyMock, потужнішими можливостями. PowerMock використовує спеціальний завантажувач класів і маніпулювання байт-кодом дозволити знущання над статичними методами, конструкторами, кінцевими класами та методами, приватними методами, видалення статичних ініціалізаторів тощо.

Почнемо з простого прикладу використання шпигуна. Простіше кажучи, API — Mockito. spy(), щоб стежити за реальним об'єктом. Це дозволить нам викликати всі звичайні методи об’єкта, відстежуючи кожну взаємодію, так само, як і з макетом.