Escribir pruebas unitarias puede ser dificíl y, a veces, un buen diseño debe ser sacrificado con el único propósito de que el software pueda ser probado. A menudo, la capacidad de prueba corresponde a un buen diseño, pero no siempre es así. Por ejemplo, las clases y métodos finales no se pueden usar, los métodos privados a veces necesitan ser protegidos o trasladados innecesariamente a un colaborador, los métodos éstaticos deben evitarse por completo, entre otras cosas, simplemente debido a las limitaciones de los framework existentes.
PowerMock es un framework que amplía otras librerías que se utilizan para hacer mocks, como EasyMock, con capacidades más potentes. PowerMock utiliza un cargador de clases personalizadas y una manipulación de bytecode para permitir la simulación de métodos estáticos, constructores, clases y métodos finales, métodos privados, eliminación de inicializadores estáticos y más. Al utilizar un cargador de clases personalizado, no es necesario realizar cambios en el IDE o en los servidores de integración continua, lo que simplifica la adopción de PowerMock. Los desarrolladores familiarizados con los frameworks de mocks encontrarán que PowerMock es fácil de usar, ya que la API es similar tanto para los métodos estáticos como para los constructores. PowerMock pretende ampliar las APIs existentes con un pequeño número de métodos y anotaciones para habilitar funciones adicionales. Actualmente PowerMock soporta EasyMock y Mockito.
Cuando se escriben pruebas unitarias, a menudo es útil omitir la encapsulación y, por lo tanto, PowerMock incluye varias características que simplifican la reflexión, especialmente útil para las pruebas. Esto permite un fácil acceso al estado interno, pero también simplifica un mocking parcial y privado.
Tenga en cuenta que PowerMock está destinado principalmente a personas con conocimientos expertos en pruebas unitarias. Ponerlo en manos de desarrolladores junior puede causar más daño que bien.
Este artículo esta basado en PowerMock.