Posts en la categoría: Java

Maven a todo color

Hay una cosa que siempre me ha fastidiado de la salida que escupe maven al ejecutar los tests: nunca sé, así de un vistazo, si todo ha ido bien o si ha fallado algo. Así que tras googlear un poco me he topado con esto http://ju-n.net/colorize-maven-output.

Se trata de una función bash que utiliza sed para procesar la salida de maven y colorearla.

Para poder utilizarlo también con watchr (sobre el que David ha blogueado recientemente) hemos (gracias David) introducido un par de modificaciones en el script que aparece en el enlace anterior:

  # aquí irían todos los exports de colores
  ...
  # hacemos un alias del comando sed que aparece en el enlace de más
  # arriba sin olvidarnos de resetear los estilos al final
  alias colorize-mvn-output='sed -e [...] && echo -ne ${RESET_FORMATTING}'

  mvn-color() {
      $(which mvn) $@ | colorize-mvn-output
  }
  alias mvn="mvn-color"

  mvn-watchr() {
      watchr $@ | colorize-mvn-output
  }

  # como usamos watchr para más cosas que ejecutar tests 
  # de maven, no creamos un alias que sobreescriba el comando 
  # watchr

Ahora, cuando hagamos directamente

  $ mvn test

o bien utilicemos watchr llamando a

 $ mvn-watchr path/to/script.file

obtendremos unos resultados muchos más coloridos.

Maven a todo color

Y con esto queda explicado mi extraño tweet.

Watchr aplicado: autotesting con Maven

Variante de la receta que os traje el otro día. Esta vez utilizando Maven en lugar de Ant. Sólo hay que modificar un poco el fichero de configuración de Watchr y listo.

watch( 'src/main/java/(.*)\.java' )  do |md|
    file = "#{md[1]}Test"
    test(file) if File.exists?("src/test/java/#{file}.java")
end

watch( 'src/test/java/(.*Test)\.java' ) { |md| test(md[1]) }

def test(file)
    system("mvn test -Dtest=#{file.gsub("/",".")}")
end

Watchr aplicado: JUnit autotesting con Ant

Ingredientes

  1. Watchr
  2. Fichero de configuración de Watchr
  3. Tarea Ant para testear una clase con JUnit

Preparación

Instalamos Watchr en nuestro sistema (es necesario disponer de Ruby en nuestra cocina para preparar esta receta):

$ gem install watchr

Preparamos un fichero de configuración de Watchr (watchr.conf) y reservamos:

watch( 'src/(.*)\.java' )  do |md|
    file = "#{md[1]}Test"
    test(file) if File.exists?("test/#{file}.java")
end

watch( 'test/(.*Test)\.java' ) { |md| test(md[1]) }

def test(file)
    system("ant -Dtest=#{file.gsub("/",".")} test-file")
end

Es importante elegir los sabores adecuados de expresiones regulares para que Watchr vigile tanto el código fuente como, los ficheros de test.

Después creamos una tarea Ant que testea una clase indicada mediante párametro:

$ ant -Dtest=mi.paquete.MiClase test-file

Sazonamos la tarea al gusto. El chef recomienda:

<target name="test-file" depends="test-compile">
    <junit>
        <classpath refid="project.classpath.test"/>
        <formatter type="brief" usefile="false"/>
        <test name="${test}"/>
    </junit>
</target>

Mezclamos todo y emplatamos:

$ watchr watchr.conf

Algunos chefs, prefieren presentar el plato usando Ant:

<target name="autotest">
    <exec command="watchr">
        <arg value="watchr.conf"/>
    </exec>
</target>

Esto último es opcional, sólo para aquellos cocineros que quieran manejar todo lo relativo a su proyecto con Ant.