2011-03-23 18 views
8

Como hice algunas investigaciones, descubrí que PowerMock es capaz de simular los métodos estáticos de Java.Mocking Static Methods

¿Alguien puede explicar (técnicamente) qué hace PowerMock diferente de JUnit y otros que no pueden o no pueden? ¿Y también por qué los métodos estáticos están causando problemas cuando se intentan burlar?

gracias

Respuesta

12

http://blog.jayway.com/2009/05/17/mocking-static-methods-in-java-system-classes/

para burlarse de un método de instancia, simplemente puede anularlo en una subclase. No puedes hacer eso con métodos estáticos porque no hay un "polimorfismo estático".

Powermock puede hacerlo porque funciona con bytecode, mientras que otros marcos populares dependen del polimorfismo y crean subclases con CGLIB.

Desde el enlace: "Básicamente todos los frameworks falsos estándar usan CGLib para crear un objeto simulado, lo que significa que están basados ​​en un modelo jerárquico (CGLib crea una subclase de la clase para probar en tiempo de ejecución que es objeto simulado real) en lugar de un modelo de delegación que PowerMock usa a través de su manipulación de código byte delegando en MockGateway ".