F?:@'.$&2& %G&1'210*%A'*5% H&$02'$$%!5&102$%!,IJ · concurrencia. De hecho Clojure está pensado...

6
Avenida de Castilla,1 - Edificio Best Point - Oficina 21B 28830 San Fernando de Henares (Madrid) tel./fax: +34 91 675 33 06 [email protected] - www.autentia.com Somos su empresa de Soporte a Desarrollo Informático. Ese apoyo que siempre quiso tener... 1. Desarrollo de componentes y proyectos a medida Tecnología Desarrollo Sistemas Gran Empresa Producción autentia Certificación o Pruebas Verificación previa RFP Concurso Consultora 1 Consultora 2 Consultora 3 Equipo propio desarrollo Piloto 3a 3b 1. Definición de frameworks corporativos. 2. Transferencia de conocimiento de nuevas arquitecturas. 3. Soporte al arranque de proyectos. 4. Auditoría preventiva periódica de calidad. 5. Revisión previa a la certificación de proyectos. 6. Extensión de capacidad de equipos de calidad. 7. Identificación de problemas en producción. 3. Arranque de proyectos basados en nuevas tecnologías ¿Qué ofrece Autentia Real Business Solutions S.L? Para más información visítenos en: www.autentia.com Compartimos nuestro conociemiento en: www.adictosaltrabajo.com Gestor portales (Liferay) Gestor de contenidos (Alfresco) Aplicaciones híbridas Tareas programadas (Quartz) Gestor documental (Alfresco) Inversión de control (Spring) BPM (jBPM o Bonita) Generación de informes (JasperReport) ESB (Open ESB) Control de autenticación y acceso (Spring Security) UDDI Web Services Rest Services Social SSO SSO (Cas) Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery JPA-Hibernate, MyBatis Motor de búsqueda empresarial (Solr) ETL (Talend) Dirección de Proyectos Informáticos. Metodologías ágiles Patrones de diseño TDD 2. Auditoría de código y recomendaciones de mejora 4. Cursos de formación (impartidos por desarrolladores en activo)

Transcript of F?:@'.$&2& %G&1'210*%A'*5% H&$02'$$%!5&102$%!,IJ · concurrencia. De hecho Clojure está pensado...

Page 1: F?:@'.$&2& %G&1'210*%A'*5% H&$02'$$%!5&102$%!,IJ · concurrencia. De hecho Clojure está pensado desde su inicio para sacarle el mayor partido al procesamiento multi core. Al correr

Avenida de Castilla,1 - Edificio Best Point - Oficina 21B28830 San Fernando de Henares (Madrid)

tel./fax: +34 91 675 33 [email protected] - www.autentia.com

Somos su empresa de Soporte a Desarrollo Informático.Ese apoyo que siempre quiso tener...

1. Desarrollo de componentes y proyectos a medida

TecnologíaDesarrolloSistemas

Gran Empresa

Producción

autentia

Certificacióno Pruebas

Verificación previa

RFP Concurso

Consultora 1

Consultora 2

Consultora 3

Equipo propio desarrolloPiloto

3a

3b

1. Definición de frameworks corporativos.2. Transferencia de conocimiento de nuevas arquitecturas.3. Soporte al arranque de proyectos.4. Auditoría preventiva periódica de calidad.5. Revisión previa a la certificación de proyectos.6. Extensión de capacidad de equipos de calidad.7. Identificación de problemas en producción.

3. Arranque de proyectos basados en nuevas tecnologías

¿Qué ofrece Autentia Real Business Solutions S.L?

Para más información visítenos en: www.autentia.com

Compartimos nuestro conociemiento en: www.adictosaltrabajo.com

Gestor portales (Liferay)Gestor de contenidos (Alfresco)Aplicaciones híbridas

Tareas programadas (Quartz)Gestor documental (Alfresco)Inversión de control (Spring)

BPM (jBPM o Bonita)Generación de informes (JasperReport)ESB (Open ESB)

Control de autenticación y acceso (Spring Security)UDDIWeb ServicesRest ServicesSocial SSOSSO (Cas)

Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery

JPA-Hibernate, MyBatisMotor de búsqueda empresarial (Solr)ETL (Talend)

Dirección de Proyectos Informáticos.Metodologías ágilesPatrones de diseñoTDD

2. Auditoría de código y recomendaciones de mejora

4. Cursos de formación (impartidos por desarrolladores en activo)

Page 2: F?:@'.$&2& %G&1'210*%A'*5% H&$02'$$%!5&102$%!,IJ · concurrencia. De hecho Clojure está pensado desde su inicio para sacarle el mayor partido al procesamiento multi core. Al correr

8/8/2014 Primeros pasos con Clojure: Leiningen y Midje

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=clojure-introduccion 1/5

Entra en Adictos a través de

Entrar

E-­mail

Contraseña

RegistrarmeOlvidé mi contraseña

Inicio Quiénes somos Formación Comparador de salarios Nuestros libros Más

» Estás en: Inicio Tutoriales Primeros pasos con Clojure: Leiningen y Midje

Síguenos a través de:

Catálogo de serviciosAutentia

Últimas Noticias

» Portales, gestores decontenidos documentales ydesarrollos a medida

» Comentando el libro Start-­up Nation, La historia delmilagro económico de Israel,de Dan Senor & Salu Singer

» Screencasts deprogramación narrados enEspañol

» Sorteo de entradas paraAPIdays Mediterranea

» Concurso del Día de laMadre:

Histórico de noticias

Últimos Tutoriales

» Smoke Testimplementados con TestNGy Selenium

» Primeros pasos conTableau

» Notificaciones push conAndroid, Google CloudMessage y JEE

» Phonegap/Cordova y lasNotificaciones Push

» Metodología ágiles.

Ver todos los tutoriales del autor

Alejandro Pérez García

Alejandro es socio fundador de Autentia y nuestro experto en J2EE, Linux yoptimización de aplicaciones empresariales.

Ingeniero en Informática y Certified ScrumMaster

Seguir a @alejandropgarci 1,102 seguidores

Si te gusta lo que ves, puedes contratarle para darte ayuda con soporte experto,impartir cursos presenciales en tu empresa o para que realicemos tus proyectoscomo factoría (Madrid). Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo,factoría y formación.

Fecha de publicación del tutorial: 2014-­08-­08 Tutorial visitado 1 veces Descargar en PDF

Primeros pasos con Clojure: Leiningen y Midje

Índice de contenidos1. Introducción2. Entorno3. Instalación de Clojure con Leiningen3.1. Instalación de Leiningen3.2. Creación de un proyecto3.3. Inspeccionando el fichero de proyecto: project.clj4. Ejecutando los tests de Clojure5. Tests más legibles con Midje5.1. Instalación de Midje5.2. Escribiendo un test de Midje5.3. Hágase la magia: ejecución automática de los tests6. Conclusiones7. Sobre el autor

1. Introducción

Clojure es un lenguaje funcional dinámico que corre en la JVM (Máquina Virtual de Java). Podemos destacar lassiguientes características:

Al ser un lenguaje funcional potencia al idea de inmutabilidad, de forma que todos los valores son constantes (noexiste el concepto de variable).Derivado de lo anterior se potencia el multi-­hilo ya que al trabajar con constantes se minimizan los conflictos de laconcurrencia. De hecho Clojure está pensado desde su inicio para sacarle el mayor partido al procesamientomulti-­core.Al correr en la JVM, se saca toda la potencia de esta máquina virtual.Al correr en la JVM se puede aprovechar todo el ecosistema/librerías que existe de Java, siendo muy fácil llamarde Clojure a Java o viceversa.

Todas estas características y muchas más (recomiendo echar un vistazo a su página oficial) hacen de este lenguaje unaopción sería a la hora de hacer nuestros desarrollos.

En este tutorial vamos a ver como dar los primeros pasos para empezar a escribir tests y código de producción.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

Hardware: Portátil MacBook Pro 15’’ (2.3 GHz Intel i7, 16GB 1600 Mhz DDR3, 500GB Flash Storage).

S E L E N I U M V I S U A L T E S T I N GAdd Automated Visual Testing to your Selenium tests in minutes

Page 3: F?:@'.$&2& %G&1'210*%A'*5% H&$02'$$%!5&102$%!,IJ · concurrencia. De hecho Clojure está pensado desde su inicio para sacarle el mayor partido al procesamiento multi core. Al correr

8/8/2014 Primeros pasos con Clojure: Leiningen y Midje

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=clojure-introduccion 2/5

Catalizando el cambio ensector informático

Últimos Tutoriales delAutor

» Cómo integrar en Gradleun servidor Jetty o Tomcat

» Kettle no es una tetera, esla herramienta de ETL dePentaho!

» Crea todo un entorno demáquinas virtuales con unsolo comando, gracias aVagrant

» ¿Endemoniado por lo lentoque es Gradle en elarranque? Aprende acontrolar su Daemon, yvuela!

» Cómo instalar Gradle,herramienta deautomatización de builds

NVIDIA GeForce G7 750M

Sistema Operativo: Mac OS X Lion 10.9.4

Clojure 1.6.0

Leiningen 2.4.3

Midje 1.6.3

JVM 1.8.0_11

3. Instalación de Clojure con Leiningen

Leiningen es la herramienta que nos va a permitir gestionar el ciclo de compilación, dependencias, ejecución de los test,empaquetado, … Sería como el Maven o Gradle de Java, o el Grunt de JavaScript.

Otra característica que tiene Leiningen es que nos permite gestionar la versión de Clojure que estamos usando en elproyecto, encargándose él mismo de descargarla e instalarla si es necesario (como Clojure es una app Java, ladescarga de los repositorios de Maven y la guardará en nuestro ~/.m2/repository)

3.1. Instalación de Leiningen

Para instalar Leiningen es tan sencillo como hacer:

1. Descargar el script lein

2. Colocarlo en en el $PATH para que lo podamos ejecutar desde la línea de comando (ej. /usr/local/bin)

3. Hacerlo ejecutable (chmod a+x /usr/local/bin/lein)

4. Ejecutarlo (lein) y en este primera ejecución se descargará e instalará a si mismo

3.2. Creación de un proyecto

Lein tiene plantillas de proyectos al estilo de los arquetipos de Maven. Para crear un proyecto de tipo aplicación, es decirque será ejecutable por si mismo, basta con ejecutar en la línea de comando:

$ lein new app mis-cositas

Donde:

new -­ es el comando lein que queremos ejecutar.app -­ es el nombre de la plantilla. Si lo omitimos usará la plantilla por defecto que es para crear una librería (un.jar).mis-cositas -­ es el nombre que le quiero dar a mi aplicación.

Esto debería haber generado la siguiente estructura:

mis-cositas/ .gitignore /doc intro.md LICENSE project.clj README.md /resources /src /mis_cositas core.clj /test /mis_cositas core_test.clj

Donde podemos destacar

el fichero project.clj -­ que es el que gestiona la compilación (como el pom.xml de Maven),el fichero core.clj -­ donde podemos empezar a desarrollar nuestra lógica de negocio,el fichero core_test.clj -­ donde podemos empezar a escribir nuestros tests.

3.3. Inspeccionando el fichero de proyecto: project.clj

Lo primero que puede llamar la atención de este fichero es que es un fichero de Clojure como otro cualquiera.

Por ahora sólo destacaremos la línea 6 donde se especifican las dependencias, y vemos como la única que hay ahoramismo es la propia versión de Clojure que queremos usar. Una ventaja de esto es que resulta muy sencillo tener

123456789

(defproject mis-­cositas "0.1.0-­SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license :name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-­v10.html" :dependencies [[org.clojure/clojure "1.6.0"]] :main ^:skip-­aot mis-­cositas.core :target-­path "target/%s" :profiles :uberjar :aot :all)

Page 4: F?:@'.$&2& %G&1'210*%A'*5% H&$02'$$%!5&102$%!,IJ · concurrencia. De hecho Clojure está pensado desde su inicio para sacarle el mayor partido al procesamiento multi core. Al correr

8/8/2014 Primeros pasos con Clojure: Leiningen y Midje

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=clojure-introduccion 3/5

distintos proyectos con distintas versiones de Clojure, ya que sólo habrá que indicar la que nos interesa en el fichero deproyecto, sin necesidad de hacer ninguna instalación previa.

4. Ejecutando los tests de ClojureClojure ya viene con una sintaxis de tests, y vimos como lein nos había generado uno de prueba. Para ejecutarlo bastacon hacer:

lein test

Deberíamos ver algo como:

Ejecutar tests de Clojure con Lein

El tests a fallado, esto es lo normal cuando el test ha sido generado por una plantilla. Vamos a echar un ojo al código deltest:

Vemos como importa el código de producción en la línea 2 con el require y luego como define un test donde comparasi el 0 y el 1 son iguales (=).

Para ver que más aserciones podemos hacer recomiendo visitar la documentación oficial del API de testing de Clojure

5. Tests más legibles con Midje

El sistema de tests que viene con Clojure sirve más que de sobra para probar cualquier cosa, pero se queda más bienescaso en cuanto a legibilidad. Además para lanzarlos tenemos que invocar o lein o el REPL, con lo que puede ser unpoco incómodo.

Para solventar estos dos problemas le podemos dar las gracias a @marik, el creador de Midje, un estupendo frameworkde test para Clojure, de forma que sea más sencilla la tarea de escribir los tests. Además soporta tanto el desarrollo dearriba-­a-­bajo, como de abajo-­a-­arriba.

La idea de Midje es que estos tests queden como si fuera la documentación de nuestro proyecto.

5.1. Instalación de Midje

Para poder empezar a usar Midje tenemos que hacer dos sencillas cosas. La primera a nivel global nos permitiráintegrar Midje dentro del ciclo de vida de Lein, de forma que encontremos el comando midje dentro de la herramientalein (ya antes hemos visto otros comandos como new o test).

Para ello tenemos que añadir la siguiente línea al fichero ~/.lein/profiles (si no existe todavía lo creamos):

Como segundo paso tenemos que indicar a nuestro proyecto que queremos usar Midje, para ello modificamos el ficheroproject.clj que hemos visto antes, para que quede de la siguiente manera:

Nótese que sólo hemos cambiado las líneas 9 y 10, para añadir la dependencia de midje sólo en el profile dedesarrollo (:dev). Así esta dependencia no se “arrastrará” cuando preparemos el ejecutable de la aplicación.

Ahora deberíamos poder ejecutar en la línea de comando:

$ lein midje

y veremos un resultado del estilo:

1234567

(ns mis-­cositas.core-­test (:require [clojure.test :refer :all] [mis-­cositas.core :refer :all])) (deftest a-­test (testing "FIXME, I fail." (is (= 0 1))))

1 :user :plugins [[lein-­midje "3.1.3"]]

12345678910

(defproject mis-­cositas "0.1.0-­SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license :name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-­v10.html" :dependencies [[org.clojure/clojure "1.6.0"]] :main ^:skip-­aot mis-­cositas.core :target-­path "target/%s" :profiles :dev :dependencies [[midje "1.6.3"]] :uberjar :aot :all)

?

?

?

Page 5: F?:@'.$&2& %G&1'210*%A'*5% H&$02'$$%!5&102$%!,IJ · concurrencia. De hecho Clojure está pensado desde su inicio para sacarle el mayor partido al procesamiento multi core. Al correr

8/8/2014 Primeros pasos con Clojure: Leiningen y Midje

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=clojure-introduccion 4/5

Ejecutar tests de Midje con Lein

En la imagen podemos ver como Midje también ejecuta los test de Clojure que tengamos en el proyecto, y ademáscolorea la salida para facilitar su lectura. ¡Sólo con eso ya es todo un acierto!

5.2. Escribiendo un test de Midje

Vamos a añadir el fichero test/mis_cositas/core_midje_test.clj, con el siguiente contenido:

Se aprecia en el código que en al izquierda de la flecha => está la expresión que queremos probar, y a la derecha elvalor del assert que debe ser el resultado.

Esto no es más que un pequeño ejemplo, e igual que antes recomiendo visitar la documentación de Midje.

5.3. Hágase la magia: ejecución automática de los tests

Si hemos ejecutado un par de veces los tests, habremos visto que tarda en arrancar. Esto se debe a que Clojure seejecuta en la JVM, así que para ejecutar cualquier cosa tiene que levantarla, y esto no es rápido.

Evidentemente esto no se puede quedar así porque sino el desarrollo sería imposible con esos tiempos de espera.Podemos paliarlo abriendo un REPL (esto carga una sola JVM que mantenemos mientras dure la sesión) y ejecutandolos tests desde aquí, pero esto es más bien incómodo porque hay que forzar el refresco de los fuentes que cambien, asíque tampoco es muy viable.

La mejor opción es ejecutar:

$ lein midje :autotest

Esto hace que al consola se quede “escuchando” cualquier cambio en los ficheros, y en cuanto esto sucede, Midje seencarga de refrescar los fuentes y ejecutar los tests. Todo en un abrir y cerrar de ojos. Así, sí!

6. Conclusiones

Clojure es un lenguaje muy potente, con unas características más que interesantes. De hecho muchos piensan que es ellenguaje del futuro. Yo no se si esto será cierto, pero si creo que es muy interesante aprenderlo sobre todo para todosaquellos como yo que estamos acostumbrados al paradigma de la Orientación a Objetos, cambiar al paradigmafuncional nos fuerza a ver las cosas de otra manera y siempre se pueden aplicar buenas ideas de uno a otro (como lode intentar que todo sea inmutable).

Espero que con este tutorial la barrera de entrada para montar el entorno sea mínima y podáis centraros en aprender ellenguaje, que es lo importante.

Si me preguntáis por editor, la verdad es que por ahora estoy usando simplemente Vim con el plugin Vim Clojure Static.Si alguien conoce algo mejor que me lo diga ;;)

7. Sobre el autor

Alejandro Pérez García, Ingeniero en Informática (especialidad de Ingeniería del Software) y Certified ScrumMaster

Socio fundador de Autentia (Desarrollo de software, Consultoría, Formación)

mailto:[email protected]

Autentia Real Business Solutions S.L. -­ “Soporte a Desarrollo”

http://www.autentia.com

A continuación puedes evaluarlo:

Regístrate para evaluarlo

123456789

(ns mis-­cositas.core-­midje-­test (:use midje.sweet) (:require [clojure.string :as str] [mis-­cositas.core :refer :all])) (fact "`split` splits strings on regular expressions and returns a vector" (str/split "a/b/c" #"/") => ["a" "b" "c"] (str/split "" #"irrelevant") => [""] (str/split "no regexp matches" #"a+\s+[ab]") => ["no regexp matches"])

?

Page 6: F?:@'.$&2& %G&1'210*%A'*5% H&$02'$$%!5&102$%!,IJ · concurrencia. De hecho Clojure está pensado desde su inicio para sacarle el mayor partido al procesamiento multi core. Al correr

8/8/2014 Primeros pasos con Clojure: Leiningen y Midje

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=clojure-introduccion 5/5

Esta obra está licenciada bajo licencia Creative Commons de Reconocimiento-­No comercial-­Sin obras derivadas 2.5

IMPULSA Impulsores Comunidad ¿Ayuda?

----sin clicks + + + + + + + +

0 personas han traído clicks a esta página

powered by karmacracy

Share | 0

» Registrate y accede a esta y otras ventajas «

Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Por favor, vota +1 o compártelo si te pareció interesante

More ShareShareShareShareShareShare

Copyright 2003-­2014 © All Rights Reserved | Texto legal y condiciones de uso | Banners | Powered by Autentia | Contacto