2010-06-05 14 views

Respuesta

14

tres inconvenientes:

  • debe utilizar un agente de Java para hacer la instrumentación de código de bytes.
  • No puede usar el archivo junit.jar firmado enviado con Eclipse.
  • Tienes que aprender una API simulada. (A diferencia de un objeto auxiliar)

Siempre se puede discutir si es bueno poder simular una clase final como JMockit. A menos que sea un código heredado, la refactorización suele ser una mejor alternativa.

Con IDEs como Eclipse, me encuentro utilizando el soporte de herramientas para generar stubs dentro de la clase de prueba con más frecuencia que el burlarse (JMockit, Mockito, etc.) en los últimos tiempos. La ventaja de este enfoque es que es muy simple. Esto es especialmente bueno cuando tienes un equipo con muchos desarrolladores y a algunos de ellos no les gusta probar y tienen poca motivación para aprender un marco burlón. ¡Además, las implementaciones de stub no tienen limitaciones de framework!

Si usted está abierto para stubbing como alternativa, que debe salir el blog de Robert C. Martin acerca de burlas y stubbing here y here

lo demás, se ve muy bien! Aunque solo tengo experiencia con JMock, EasyMock y conocimiento básico con JMockit.

+0

Sí, también me pregunto qué tan lejos quiero ir con la burla. Mi propio código usa Inyección de Dependencia en todas partes, por lo que burlarse no es realmente una tarea compleja (aunque no siempre uso interfaces para todo debido al esfuerzo de mantenimiento agregado + la sobrecarga de rendimiento cuando se usa con GWTRPC). Cuando dices que usas el soporte de herramientas para generar stubs en Eclipse, ¿qué herramientas tienes en mente? –

+0

Solo el soporte central de Java en Eclipse. Por ejemplo, si crea una clase privada o anónima que implemente la interfaz que desea archivar, Eclipse puede crear una implementación de esqueleto. Simplemente haga clic en + 1 después de haber seleccionado la clase. – Espen

+0

Ah, vale, pensé que tal vez haya alguna herramienta que mantenga el código auxiliar sincronizado, cuando el código cambie o algo así. –

15

Recientemente he adoptado un proyecto que usa JMockit y creo que la calidad del código ciertamente ha sufrido como resultado de la capacidad de la biblioteca de burlar métodos estáticos y privados.

Las pruebas son muy frágiles debido a detalles de implementación contenidas en los métodos privados se están probando (por lo que si cambio cómo la clase hace algo que puede romper las pruebas, incluso si lo la clase no se ha visto afectada).

El código también está plagado de llamadas a métodos estáticos; si los desarrolladores no hubieran tenido la capacidad de burlarse de ellos, creo que se habrían esforzado más por desvincular las cosas un poco mejor.

+0

No entiendo este comentario. Usted dice que las pruebas se volvieron frágiles después de usar JMockit b/c, los detalles de implementación en métodos privados fueron ** probados **. Pero seguramente la habilidad de burlarse de tales métodos privados debería haberlo ayudado a mitigar el problema en realidad ** burlándose ** de esos métodos privados en vez de agravarlo ** probando ** los métodos privados. Entonces, ¿JMockit no ha funcionado a favor de usted haciendo que sus pruebas sean mejores que sin él? Sólo curioso. – mystarrocks

+1

Creo que las pruebas fueron frágiles porque si alguien refactoriza una clase (por ejemplo, renombra/desglosa/combina algunos métodos internos, o incluso cambia por completo la forma en que la clase funciona internamente sin cambiar su API pública), entonces las pruebas que se hacen dentro de la clase probar sus métodos privados se rompería. No creo que a un examen unitario le importe cómo una clase hace su trabajo, solo debería preocuparse de si el trabajo se realiza correctamente o no. Eso lo hace más claro? – codebox

+0

Ah, sí lo hace. Me sentí como si [este] (http://stackoverflow.com/a/11834082/934307) comentario comparte el mismo sentimiento que el tuyo. ¡Aclamaciones! – mystarrocks

Cuestiones relacionadas