java mocking jmock

java - jmock burlándose de un método estático



mocking (3)

Powermock es una extensión de EasyMock que permite la burla de métodos estáticos.

Tengo un método estático en mi código que me gustaría burlar de alguna manera.

Estoy usando jmock.

Una forma en que supongo que podría hacer esto es tener una "clase contenedora" alrededor del método estático y burlar esto, pero esperaba una solución mejor.

Voy por esto de la manera incorrecta?

REALIMENTACIÓN:

Iba a tener una interfaz y clase que tenía un método que simplemente llamaba al método estático. Me permitiría burlarme de la lógica simplemente burlando la llamada a esta clase contenedora. (Me siento sucio incluso hablando de eso :))


No apoyamos el uso de métodos estáticos en jMock porque no se ajusta a nuestro enfoque de diseño. Preferimos no usar métodos estáticos para funciones significativas que puedan afectar el estado del sistema. Tendemos a usarlos solo para admitir el código OO y hacerlo más legible. Es por eso que vemos burlarse de los métodos estáticos como una pista de que hay un problema. Una excepción es cuando está en una biblioteca de un tercero, pero probablemente lo envolveremos en algo más orientado a objetos de todos modos.


JMockit es otro kit de herramientas que permite la burla de métodos estáticos (así como métodos finales, constructores, etc.).

No veo ningún problema con el uso prudente de los métodos estáticos cuando se diseña una solución OO por lo demás.

Por ejemplo, un patrón / modismo que me gusta usar es la fachada estática , particularmente para proporcionar una API más simple y fácil de usar al subsistema de persistencia en una aplicación comercial. En mi opinión, ninguna otra solución es más elegante que algo así como:

List<Person> peopleAboveAge = find("select p from Person p where p.age >= ?", age);

donde el método de find se importa estáticamente de una clase PersistenceFacade que define solo métodos estáticos, y encapsula cómo obtener la instancia de Session / EntityManager adecuada. Esta solución es amigable y flexible para las pruebas unitarias. Lo usé en una aplicación comercial que tenía más de 500 entidades persistentes, usando Hibernate. La fachada estática nos ayudó cuando migramos de Hibernate 2 a Hibernate 3, cuando migramos de Oracle a Sybase y luego de regreso a Oracle, y cuando comenzamos a usar las anotaciones JPA en lugar de los archivos "hbm.xml" para la asignación de ORM.