Testing con java

Buenas tardes amigos del foro, estoy empezando a hacer mis pininos sobre testing con en java y hay algunos conceptos que aún no entiendo.
He buscado bastante pero la información la encuentro muy esparcida y me gustaría saber si alguien que tiene un panorama más amplio pudiera echarme una mano:

¿Qué son los test de integración? He visto que existen frameworks de testing que prueban las aplicaciones pero desde la capa vista, por ejemplo SeleniumTest prueba pero no los métodos de manera directa, sino la capa vista de una aplicación web... mi pregunta es cómo se le llama a este tipo de testing que lo hace sobre la capa vista?

He visto que existe algo llamado judson (o jenkis no?), eso para qué sirve?

¿He visto que existe algo llamado MockTest, eso para qué sirve?

Aprecio mucho sus respuestas y aportes para aclararme el panorama, si alguien me puede ayudar recomendándome algún tutorial en español (de preferencia) para mí sería de gran ayuda.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

por partes

Son varias cosas...

Primero que nada, las pruebas unitarias, donde pruebas las unidades más pequeñas de tu aplicación, por separado. En el caso de Java, siendo OOP, pues pruebas métodos. Una prueba unitaria debe servir para probar un método. Por ejemplo si tienes un método que convierte una cadena de minúsculas a mayúsculas, pues probar que realmente haga eso pasándole palabras en minúsculas, en mayúsculas, mixtas, puros espacios, puros garabatos, acentos, eñes, y por supuesto qué pasa si le pasas null.

Las pruebas de integración es cuando ya quieres probar una parte de la aplicación que no se puede como prueba unitaria, por ejemplo el proceso completo de dar de alta un usuario. Qué pasa si el usuario tiene que llenar una forma y mete mal unos datos, longitudes inválidas, campos en blanco, letras en campos numéricos, etc etc (eso se puede probar de manera unitaria, pero la prueba de integración debe abarcar ya el proceso completo de ver qué error se devuelve en esos casos, y comprobar que cuando la información es válida, el usuario quede registrado correctamente - para eso hay que involucrar varios componentes distintos conectados entre sí, por eso es de integración, en contraste con la unitaria que son pruebas aisladas).

Jenkins es un sistema para manejar integración contínua. Eso es todo un proceso más sofisticado que tal vez se podría hacer sin la herramienta pero resulta bastante complicado; Jenkins te ayuda con los pasos de dicho proceso. Integración contínua, visto de modo muy simple, es que todo el tiempo estés probando tu código y teniendo lista una versión de tu software para salir a producción, o si no está lista, que sepas qué cosas están fallando. Para eso se requiere que cada que un miembro del equipo hace un commit al sistema de control de versiones, se ejecuten las pruebas unitarias y de integración, y se genere un reporte con los resultados.

Mocking es una práctica que consiste en crear componentes falsos, o mockups, para poder probar un componente que los requiere para funcionar. Siguiendo el ejemplo de dar de alta un usuario, para probar la pura parte de captura de datos, puedes tener un mockup del componente de acceso a datos, y para cuando pruebas el componente de acceso a datos, puedes tener un mockup de la parte de captura de datos; de esa forma, puede haber dos personas trabajando en esos dos componentes (acceso a datos, interfaz de captura) y si uno deja su componente en estado disfuncional (no pasa pruebas, no compila, lo que sea), no se afectan las pruebas del otro componente.

Re: Testing

Muchas gracias por la información joven ezamudio, ahora entiendo mejor estos conceptos y me da oportunidad de iniciar mi investigación con un panorama más claro.

Anoche estuve investigando un poco sobre cada tema, gracias a su explicación entendí mucho más rápido las cosas; entre las investigaciones revisé el código de javamexico2.0 y me di cuenta que ustedes utilizan el llamado Mocking; la siguiente duda que me surge es porqué no utilizaron un framework para hacer mocking y en lugar de ello crearon a mano los componentes falsos?

Mi pregunta es porque deseo testear mi capa de acceso a datos pero no se qué sea mejor, si ponerme a investigar sobre EasyMock o hacerle como ustedes, crear a mano los componentes falsos.... o tal vez hasta me estoy confundiendo de términos.

Gracias por su tiempo

Imagen de ezamudio

mocking

Hay varios frameworks que puedes revisar, esta mockito, easymock y a veces algunos frameworks de pruebas integran sus propios generadores de mockups o usan un tercero que ya te incluyen.

No sé cuál javaMexico hayas revisado porque hay dos javaMexicos 2.0 jajajaj, uno en Tapestry 5 que ya se murió y uno en Grails que apenas y es un esqueleto. El de Tapestry 5 está en Java y creo que sí usaba puros mockups hechos a mano; el de Grails pues creo que Grails integra spock o se puede integrar fácilmente y si mal no recuerdo, Spock trae algo para facilitar los mockups.

jm2.0 Tap5

Revisaba el que está echo con tapestry 5.0, por cierto el proyecto al que implementaré los test está echo en tap5.0 y me parece muy buen framework en todos los sentidos.

Gracias por la información proporcionada