2010-06-27 23 views
21

Recientemente hice el cambio a Mockito framework y estoy muy contento con él (vea también blog-post). El cambio de EasyMock a Mockito fue muy sencillo y logré que las pruebas fueran compatibles (es decir, los casos de prueba se comportan igual).¿Mockito es preferible a EasyMock?

¿Ve motivos reales o criterios de tiroteo para preferir EasyMock a Mockito? Hasta el momento de la base de código con el que trabajé, no puedo, pero estoy interesado en su punto de vista.

+0

duplicado Posible de http://stackoverflow.com/questions/22697/whats-the-best-mock-framework-for- java – Raedwald

Respuesta

7

Estoy más familiarizado con EasyMock que con Mockito, así que tuve que investigar un poco. Mockito tiene un page que hace una comparación explícita desde el punto de vista de Mockito.

mi punto de vista, las ventajas de Mockito son:

  • separación explícita de talón y verificación
  • comparadores se basan en Hamcrest (también apoyado por JUnit) en lugar de una API personalizada
  • Creado los burlajes son siempre 'agradables'; es decir, las llamadas a métodos que no están bloqueadas devuelven datos limpios (como una lista vacía) en lugar de fallar

EasyMock tiene un conjunto de funciones muy similar. Los principales diferenciadores para Mockito se basan en aquellas áreas de EasyMock que el equipo de Mockito pensó que eran limitaciones o prácticas subóptimas.

Desde un punto de vista funcional, ninguno de los productos es capaz de simular métodos estáticos (tenía que hacer esto para probar sin un MBeanServer), pero en ese caso puede usar PowerMock en cualquiera de los frameworks.

Yo diría que vaya con el estilo que se ajuste a sus requisitos de prueba.

Espero que esto ayude!

6

Mockito puede estar mejor ahora de lo que fue la última vez que lo probé, pero me perdió cuando cambió su API para que sea incompatible con versiones anteriores. La actualización a la última versión me hubiera obligado a cambiar muchas de mis pruebas unitarias existentes, lo cual considero inaceptable. Decidí que era demasiado inmadura e inestable para mis necesidades.

Eso no quiere decir que haya algo de malo en ello. La versión que estaba usando todavía funciona bien, aunque desde entonces volví a EasyMock.

+0

Puedo imaginar que esto fue doloroso. En mi caso, comencé con la versión 1.8.3. Al observar las notas de lanzamiento, la API parece haberse estabilizado. –

22

Mockito fue desarrollado para permitir que la unidad de pruebas de estilo BDD, es decir:

  • Dada (el contexto en el que se ejecuta la unidad de prueba)
  • When (los eventos que producen el comportamiento que está interesado en)
  • Luego (el resultado que está buscando).

en contraposición a

  • Dado
  • esperar (aquí es donde la verificación se hace)
  • Cuando
  • Entonces (volver atrás y mirar en lo que anotó en el esperar porque hay no hay información real aquí).

En mi humilde opinión, produce pruebas más legibles y le permite separar elementos como el contexto en el que se está ejecutando (configuración de los simuladores) y la verificación del comportamiento que le interesa. Los marcos burlones previos le requerían establecer expectativas para cada interacción, independientemente de si era relevante para el aspecto del comportamiento que observabas en esa prueba o no.

+2

eso no es cierto, no tienes que 'establecer expectativas para cada interacción'. Con Easymock puedes simplemente configurar un NiceMock (createNiceMock()). De todos modos, creo que probar la interacción de objetos es una buena idea (y debería ser el comportamiento predeterminado/común) .. Rara vez uso niceMocks – mickthompson

+0

Mockito era originalmente una bifurcación de EasyMock, antes de que existiera NiceMock. En BDD, no son pruebas, solo descripciones de comportamiento con algunos ejemplos de cómo usar una clase. La idea de BDD es hacer que cambiar sea fácil y seguro, en lugar de fijar el código para que no se rompa. Las pruebas son un buen subproducto. En ese mundo, probar cada interacción no tiene tanto sentido como producir ejemplos legibles y fáciles de cambiar. – Lunivore

+1

Quiero probar mi código ... entonces, si es legible y fácil de cambiar, es otra historia ... No creo que los expertos de TDD confirmen que "la interacción no tiene mucho sentido". Siempre produce algo a partir de la interacción de los componentes ... Prefiero tener algo que sea menos legible pero pruebe las interacciones correctas. La interacción en mi humilde opinión (como código legible/fácil de cambiar) es un tema principal en Pruebas y shouldn Evitarlo tan fácilmente – mickthompson

Cuestiones relacionadas