BDD + Java, ¿qué framework uso?

Buenas! :)

Hace un par de semanas pretendía, porque todavía no lo he hecho, empezar un proyecto personal y hacerlo desde cero con BDD en Java. Hasta ahora no me había usado ningún tipo de framework para esto en Java, conocía cosas de otros lenguajes con Cucumber para Ruby, y no sabía exactamente con que herramientas nos podemos encontrar. Haciendo una búsqueda rápida en Google aparecieron de momento unas cuantas alternativas con lo cuál tenía dos opciones: verlas todas o preguntar a la #LazyWeb en Twitter por una recomendación. Obviamente hice lo segundo, pregunté :), pero he acabado haciendo lo primero. No tengo remedio!

Voy a situar los criterios en los cuáles me he basado para el “estudio” (si podemos llamarlo así porque es muy superficial):

  • Quería algo como Cucumber en Ruby, que me permitiese esa expresividad en el lenguaje natural y porque me mola :P
  • Quería poder lanzarlo con JUnit desde un Eclipse. No buscaba plugins de Maven ni cosas de esta.
  • Quería algo que me permitiera identificar las partes de una historia de usuario, plasmarlas en código y poder hacer sustitución de variables y cosas de esta para una relación entre los test finales de código y los escenarios.
  • No buscaba una herramienta de “colaboración” con el cliente, es decir, los acceptance test tienen la gracia de interactuar con el cliente, que incluso sea él quién los escriba y/o mantenga y sean cercanos a su dominio. Yo buscaba una herramienta para mi, mi propio cliente, si, pero más a nivel de código.
  • Que me molase :D

Y dicho esto os invito a mirar el (suficiente) código que he puesto en GitHub sobre los tres proyectos frameworks que han alcanzado el Top Three de esta comparativa. El repositorio está en: https://github.com/kinisoftware/BDD-Java

Para no hacer esto un ladrillo infumable del estilo de @eamodeorubio, @jmbeas o @david_bonilla, voy a listar los frameworks que tuve en cuenta y lo que opinio:

  • Cucumber-JVM: En principio sabía que podría hacer cosas con Cucumber y JRuby como vi hace unos años en un seminario de @calavera pero no sabía que había una implementación propia para la JVM. Es una implementación pura de Java y mola mucho. Además soporta mucho (todos?) los lenguajes de la JVM. Os invito a probarlo. Cumple con los criterios que pongo arriba. ¡OJO! Con la versión que usáis, al principio cogí la última del repo de maven y acabé bajando el código de la implementación de GitHub para ver los ejemplos y cuál se adaptaba al funcionamiento de estos. No está muy documentado aún más haya de ejemplos (pocos), por ponerle una pega.
  • JBehave: Me lo recomendó @ialcazar y, viniendo de un crack, no se equivocaba. Otro de los ganadores de la noche. Tiene una muy muy buena documentación. Aunque tiene un, con respecto a los otros dos frameworks ganadores, un gran “pero, lo complejo que puede ser lanzar un test. Vamos, como siempre, todo lo complejo (y quizás completo) que tú quieras. La estructura es my parecida a Cucumber, declaras una historia por un sitio, en texto plano, luego el test Java que lo representa y un clase para “lanzar el test”. CucumberJVM sigue los mismos pasos pero el “lanzador” de JBehave puede ser difícil de comprender. Eso sí, tiene buen naming.
  • Spock: La mejor sorpresa de todos. Es un framework para Groovy y Java, escrito en Groovy y eso, señores, me mola, que le vamos a hacer. Ya no que sea Groovy, sino acostumbrado a Java ponerme a hacer cosas en un lenguaje con una sintaxis inspirada en otros como Ruby, pues me hace despertar ese gusanillo de seguir programando y aprendiendo más allá de mis Java-boundaries. La pega, antes de nada, usar un lenguaje para los test que es distinto a Java y tener preparado Eclipse, en mi caso, para usar Groovy. Lo bueno, desde mi humilde opinión, el más limpio de los tres en cuánto a definir el test y lanzarlo. Una sola clase con código de “historia de usuario”. Nothing else! Si es cierto que, teniendo en cuenta que buscaba especificar las historias por un lado, representarlas en código y tener sustitución de variables entre historia y código, aquí no se cumple del todo, pero es molón! :D
  • EasyB: No tiene proyecto porque lo descarté cuando leí sobre su forma de usarlo. Tiene una muy buena documentación y la sintaxis es muy parecida a los anteriores, pero no me permite (al menos no lo he encontrado, existía una implementación por ahí pero no mantenida en el tiempo) arrancarlo desde JUnit, esto es, lanzando un test normal en Eclipse. Es verdad que existe un plugin para ello pero no era lo que buscaba. No digo por eso que sea malo, solo que no cumplía mis criterios :P
  • Concordion: Una de las mejores herramientas que existe para test de aceptación en Java. Su punto fuerte está en la colaboración con el cliente pero, para mí, también fue su punto en contra. Su documentación es fantástica, lo uses o no deberías pasarte por su apartado de Hints and Tips, brutal! Lo descarté porque, aunque puede ejecutarse desde JUnit, no tiene las características a nivel de sintaxis en el código que yo buscaba (al estilo Cucumber) y tampoco me gustaba la idea de definir un fichero HTML con lal especificación y luego la clase de test por otro lado. Es, para mi, de las mejores en cuánto proporcionar colaboración y un entorno más amigable para un cliente que no quiere oir hablar del código, pero yo no buscaba eso.
  • FitNesse: Herramienta que tiene detrás al maestro @unclebobmartin y compañía. Esto ya le aporta un voto de confianza. Aunque no me moló, aquí soy subjetivo, ya que tiene la parte de colaboración y necesidad de definir fuera de Java escenarios con páginas Web, Wiki y un server propio. También es verdad que es a la que menos tiempo le dediqué y aquí me dejo llevar por mis ganas de probar las tres primera opciones. En cualquier caso aquí hay unos videos de @unclebobmartin a modo de tutorial: http://fitnesse.org/FrontPage.VideoTutorials

Y esto es todo amigos! Al final he conseguido tener un post interminable :D Creo que profundizaré más con CucumberJVM, es el que más me ha gustado aunque todavía está verde en algunos aspectos pero así, igual, algo puedo aportar ;)

Buenas! :)

Hace un par de semanas pretendía, porque todavía no lo he hecho, empezar un proyecto personal y hacerlo desde cero con BDD en Java. Hasta ahora no me había usado ningún tipo de framework para esto en Java, conocía cosas de otros lenguajes con Cucumber para Ruby, y no sabía exactamente con que herramientas nos podemos encontrar. Haciendo una búsqueda rápida en Google aparecieron de momento unas cuantas alternativas con lo cuál tenía dos opciones: verlas todas o preguntar a la #LazyWeb en Twitter por una recomendación. Obviamente hice lo segundo, pregunté :), pero he acabado haciendo lo primero. No tengo remedio!

Voy a situar los criterios en los cuáles me he basado para el “estudio” (si podemos llamarlo así porque es muy superficial):

  • Quería algo como Cucumber en Ruby, que me permitiese esa expresividad en el lenguaje natural y porque me mola :P
  • Quería poder lanzarlo con JUnit desde un Eclipse. No buscaba plugins de Maven ni cosas de esta.
  • Quería algo que me permitiera identificar las partes de una historia de usuario, plasmarlas en código y poder hacer sustitución de variables y cosas de esta para una relación entre los test finales de código y los escenarios.
  • No buscaba una herramienta de “colaboración” con el cliente, es decir, los acceptance test tienen la gracia de interactuar con el cliente, que incluso sea él quién los escriba y/o mantenga y sean cercanos a su dominio. Yo buscaba una herramienta para mi, mi propio cliente, si, pero más a nivel de código.
  • Que me molase :D

Y dicho esto os invito a mirar el (suficiente) código que he puesto en GitHub sobre los tres proyectos frameworks que han alcanzado el Top Three de esta comparativa. El repositorio está en: https://github.com/kinisoftware/BDD-Java

Para no hacer esto un ladrillo infumable del estilo de @eamodeorubio, @jmbeas o @david_bonilla, voy a listar los frameworks que tuve en cuenta y lo que opinio:

  • Cucumber-JVM: En principio sabía que podría hacer cosas con Cucumber y JRuby como vi hace unos años en un seminario de @calavera pero no sabía que había una implementación propia para la JVM. Es una implementación pura de Java y mola mucho. Además soporta mucho (todos?) los lenguajes de la JVM. Os invito a probarlo. Cumple con los criterios que pongo arriba. ¡OJO! Con la versión que usáis, al principio cogí la última del repo de maven y acabé bajando el código de la implementación de GitHub para ver los ejemplos y cuál se adaptaba al funcionamiento de estos. No está muy documentado aún más haya de ejemplos (pocos), por ponerle una pega.
  • JBehave: Me lo recomendó @ialcazar y, viniendo de un crack, no se equivocaba. Otro de los ganadores de la noche. Tiene una muy muy buena documentación. Aunque tiene un, con respecto a los otros dos frameworks ganadores, un gran “pero, lo complejo que puede ser lanzar un test. Vamos, como siempre, todo lo complejo (y quizás completo) que tú quieras. La estructura es my parecida a Cucumber, declaras una historia por un sitio, en texto plano, luego el test Java que lo representa y un clase para “lanzar el test”. CucumberJVM sigue los mismos pasos pero el “lanzador” de JBehave puede ser difícil de comprender. Eso sí, tiene buen naming.
  • Spock: La mejor sorpresa de todos. Es un framework para Groovy y Java, escrito en Groovy y eso, señores, me mola, que le vamos a hacer. Ya no que sea Groovy, sino acostumbrado a Java ponerme a hacer cosas en un lenguaje con una sintaxis inspirada en otros como Ruby, pues me hace despertar ese gusanillo de seguir programando y aprendiendo más allá de mis Java-boundaries. La pega, antes de nada, usar un lenguaje para los test que es distinto a Java y tener preparado Eclipse, en mi caso, para usar Groovy. Lo bueno, desde mi humilde opinión, el más limpio de los tres en cuánto a definir el test y lanzarlo. Una sola clase con código de “historia de usuario”. Nothing else! Si es cierto que, teniendo en cuenta que buscaba especificar las historias por un lado, representarlas en código y tener sustitución de variables entre historia y código, aquí no se cumple del todo, pero es molón! :D
  • EasyB: No tiene proyecto porque lo descarté cuando leí sobre su forma de usarlo. Tiene una muy buena documentación y la sintaxis es muy parecida a los anteriores, pero no me permite (al menos no lo he encontrado, existía una implementación por ahí pero no mantenida en el tiempo) arrancarlo desde JUnit, esto es, lanzando un test normal en Eclipse. Es verdad que existe un plugin para ello pero no era lo que buscaba. No digo por eso que sea malo, solo que no cumplía mis criterios :P
  • Concordion: Una de las mejores herramientas que existe para test de aceptación en Java. Su punto fuerte está en la colaboración con el cliente pero, para mí, también fue su punto en contra. Su documentación es fantástica, lo uses o no deberías pasarte por su apartado de Hints and Tips, brutal! Lo descarté porque, aunque puede ejecutarse desde JUnit, no tiene las características a nivel de sintaxis en el código que yo buscaba (al estilo Cucumber) y tampoco me gustaba la idea de definir un fichero HTML con lal especificación y luego la clase de test por otro lado. Es, para mi, de las mejores en cuánto proporcionar colaboración y un entorno más amigable para un cliente que no quiere oir hablar del código, pero yo no buscaba eso.
  • FitNesse: Herramienta que tiene detrás al maestro @unclebobmartin y compañía. Esto ya le aporta un voto de confianza. Aunque no me moló, aquí soy subjetivo, ya que tiene la parte de colaboración y necesidad de definir fuera de Java escenarios con páginas Web, Wiki y un server propio. También es verdad que es a la que menos tiempo le dediqué y aquí me dejo llevar por mis ganas de probar las tres primera opciones. En cualquier caso aquí hay unos videos de @unclebobmartin a modo de tutorial: http://fitnesse.org/FrontPage.VideoTutorials

Y esto es todo amigos! Al final he conseguido tener un post interminable :D Creo que profundizaré más con CucumberJVM, es el que más me ha gustado aunque todavía está verde en algunos aspectos pero así, igual, algo puedo aportar ;)

Buenas! :)

Hace un par de semanas pretendía, porque todavía no lo he hecho, empezar un proyecto personal y hacerlo desde cero con BDD en Java. Hasta ahora no me había usado ningún tipo de framework para esto en Java, conocía cosas de otros lenguajes con Cucumber para Ruby, y no sabía exactamente con que herramientas nos podemos encontrar. Haciendo una búsqueda rápida en Google aparecieron de momento unas cuantas alternativas con lo cuál tenía dos opciones: verlas todas o preguntar a la #LazyWeb en Twitter por una recomendación. Obviamente hice lo segundo, pregunté :), pero he acabado haciendo lo primero. No tengo remedio!

Voy a situar los criterios en los cuáles me he basado para el “estudio” (si podemos llamarlo así porque es muy superficial):

  • Quería algo como Cucumber en Ruby, que me permitiese esa expresividad en el lenguaje natural y porque me mola :P
  • Quería poder lanzarlo con JUnit desde un Eclipse. No buscaba plugins de Maven ni cosas de esta.
  • Quería algo que me permitiera identificar las partes de una historia de usuario, plasmarlas en código y poder hacer sustitución de variables y cosas de esta para una relación entre los test finales de código y los escenarios.
  • No buscaba una herramienta de “colaboración” con el cliente, es decir, los acceptance test tienen la gracia de interactuar con el cliente, que incluso sea él quién los escriba y/o mantenga y sean cercanos a su dominio. Yo buscaba una herramienta para mi, mi propio cliente, si, pero más a nivel de código.
  • Que me molase :D

Y dicho esto os invito a mirar el (suficiente) código que he puesto en GitHub sobre los tres proyectos frameworks que han alcanzado el Top Three de esta comparativa. El repositorio está en: https://github.com/kinisoftware/BDD-Java

Para no hacer esto un ladrillo infumable del estilo de @eamodeorubio, @jmbeas o @david_bonilla, voy a listar los frameworks que tuve en cuenta y lo que opinio:

  • Cucumber-JVM: En principio sabía que podría hacer cosas con Cucumber y JRuby como vi hace unos años en un seminario de @calavera pero no sabía que había una implementación propia para la JVM. Es una implementación pura de Java y mola mucho. Además soporta mucho (todos?) los lenguajes de la JVM. Os invito a probarlo. Cumple con los criterios que pongo arriba. ¡OJO! Con la versión que usáis, al principio cogí la última del repo de maven y acabé bajando el código de la implementación de GitHub para ver los ejemplos y cuál se adaptaba al funcionamiento de estos. No está muy documentado aún más haya de ejemplos (pocos), por ponerle una pega.
  • JBehave: Me lo recomendó @ialcazar y, viniendo de un crack, no se equivocaba. Otro de los ganadores de la noche. Tiene una muy muy buena documentación. Aunque tiene un, con respecto a los otros dos frameworks ganadores, un gran “pero, lo complejo que puede ser lanzar un test. Vamos, como siempre, todo lo complejo (y quizás completo) que tú quieras. La estructura es my parecida a Cucumber, declaras una historia por un sitio, en texto plano, luego el test Java que lo representa y un clase para “lanzar el test”. CucumberJVM sigue los mismos pasos pero el “lanzador” de JBehave puede ser difícil de comprender. Eso sí, tiene buen naming.
  • Spock: La mejor sorpresa de todos. Es un framework para Groovy y Java, escrito en Groovy y eso, señores, me mola, que le vamos a hacer. Ya no que sea Groovy, sino acostumbrado a Java ponerme a hacer cosas en un lenguaje con una sintaxis inspirada en otros como Ruby, pues me hace despertar ese gusanillo de seguir programando y aprendiendo más allá de mis Java-boundaries. La pega, antes de nada, usar un lenguaje para los test que es distinto a Java y tener preparado Eclipse, en mi caso, para usar Groovy. Lo bueno, desde mi humilde opinión, el más limpio de los tres en cuánto a definir el test y lanzarlo. Una sola clase con código de “historia de usuario”. Nothing else! Si es cierto que, teniendo en cuenta que buscaba especificar las historias por un lado, representarlas en código y tener sustitución de variables entre historia y código, aquí no se cumple del todo, pero es molón! :D
  • EasyB: No tiene proyecto porque lo descarté cuando leí sobre su forma de usarlo. Tiene una muy buena documentación y la sintaxis es muy parecida a los anteriores, pero no me permite (al menos no lo he encontrado, existía una implementación por ahí pero no mantenida en el tiempo) arrancarlo desde JUnit, esto es, lanzando un test normal en Eclipse. Es verdad que existe un plugin para ello pero no era lo que buscaba. No digo por eso que sea malo, solo que no cumplía mis criterios :P
  • Concordion: Una de las mejores herramientas que existe para test de aceptación en Java. Su punto fuerte está en la colaboración con el cliente pero, para mí, también fue su punto en contra. Su documentación es fantástica, lo uses o no deberías pasarte por su apartado de Hints and Tips, brutal! Lo descarté porque, aunque puede ejecutarse desde JUnit, no tiene las características a nivel de sintaxis en el código que yo buscaba (al estilo Cucumber) y tampoco me gustaba la idea de definir un fichero HTML con lal especificación y luego la clase de test por otro lado. Es, para mi, de las mejores en cuánto proporcionar colaboración y un entorno más amigable para un cliente que no quiere oir hablar del código, pero yo no buscaba eso.
  • FitNesse: Herramienta que tiene detrás al maestro @unclebobmartin y compañía. Esto ya le aporta un voto de confianza. Aunque no me moló, aquí soy subjetivo, ya que tiene la parte de colaboración y necesidad de definir fuera de Java escenarios con páginas Web, Wiki y un server propio. También es verdad que es a la que menos tiempo le dediqué y aquí me dejo llevar por mis ganas de probar las tres primera opciones. En cualquier caso aquí hay unos videos de @unclebobmartin a modo de tutorial: http://fitnesse.org/FrontPage.VideoTutorials

Buenas! :)

Hace un par de semanas pretendía, porque todavía no lo he hecho, empezar un proyecto personal y hacerlo desde cero con BDD en Java. Hasta ahora no me había usado ningún tipo de framework para esto en Java, conocía cosas de otros lenguajes con Cucumber para Ruby, y no sabía exactamente con que herramientas nos podemos encontrar. Haciendo una búsqueda rápida en Google aparecieron de momento unas cuantas alternativas con lo cuál tenía dos opciones: verlas todas o preguntar a la #LazyWeb en Twitter por una recomendación. Obviamente hice lo segundo, pregunté :), pero he acabado haciendo lo primero. No tengo remedio!

Voy a situar los criterios en los cuáles me he basado para el “estudio” (si podemos llamarlo así porque es muy superficial):

  • Quería algo como Cucumber en Ruby, que me permitiese esa expresividad en el lenguaje natural y porque me mola :P
  • Quería poder lanzarlo con JUnit desde un Eclipse. No buscaba plugins de Maven ni cosas de esta.
  • Quería algo que me permitiera identificar las partes de una historia de usuario, plasmarlas en código y poder hacer sustitución de variables y cosas de esta para una relación entre los test finales de código y los escenarios.
  • No buscaba una herramienta de “colaboración” con el cliente, es decir, los acceptance test tienen la gracia de interactuar con el cliente, que incluso sea él quién los escriba y/o mantenga y sean cercanos a su dominio. Yo buscaba una herramienta para mi, mi propio cliente, si, pero más a nivel de código.
  • Que me molase :D

Y dicho esto os invito a mirar el (suficiente) código que he puesto en GitHub sobre los tres proyectos frameworks que han alcanzado el Top Three de esta comparativa. El repositorio está en: https://github.com/kinisoftware/BDD-Java