Como hacer pruebas a un script Groovy

Como probar un script Groovy.

Hola, te voy a platicar unas formas en las que vas a poder alardear que tus ‘scripts’ en Groovy tienen todas las pruebas unitarias necesarias y que el día de la instalación a producción te lo pueden dar libre, porque no tiene caso que pierdas tu tiempo viendo como los demás se sorprenden de lo bien que esta jalando tu ‘script’; aunque seguramente un sysadmin sea tu usuario. :)

¡Obvio, lo anterior es broma!

Assert es tu amigo.

Quisiera platicar de assert, aunque la información sobre esta herramienta en Groovy es muy extensa en Internet.

Los assert dentro del código son muy útiles cuando muestras a tus amigos los bocetos de las ideas que tuviste en la noche. Por ejemplo:

def saludos   = ['no':false, 'si': true, 'claro': true, 'no lo se': false]
def respuesta = 'si'

assert respuesta in saludos

println saludos."$respuesta"

En este caso es importante que el assert haga su trabajo, de lo contrario ocurrirá una groovy.lang.MissingPropertyException.

En lo personal no he experimentado el llenar todo el código de sentencias assert, aunque no sería mala idea jugar un rato con eso y ver los beneficios que encuentro.

Pero bueno, como a mi en este momento no me parece buena idea lo anterior ¿cómo saco las pruebas a otro script?

GroovyScriptEngine al rescate.

Esta utilidad permite cargar clases para después crear instancias de de ella y usarla normalmente. Por ejemplo:

rsa$ ls  saludo_groovy_script_engine*
saludo_groovy_script_engine.groovy      saludo_groovy_script_engine_test.groovy
def rootPath = ['./'] as String[]
def groovyScriptEngine = new GroovyScriptEngine(rootPath)
def script = groovyScriptEngine.loadScriptByName('saludo_groovy_script_engine.groovy')
def _instance = script.newInstance()
def respuesta = 'si'

assert respuesta in _instance.saludos
_instance.isSaludoTrueMethod(respuesta)
_instance.isSaldoTrueClosure(respuesta)

class saludo_groovy_script_engine{
        def saludos   = ['no':false, 'si': true, 'claro': true, 'no lo se': false]

        def isSaludoTrueMethod(respuesta){
                saludos."$respuesta"
        }

        def isSaldoTrueClosure = { respuesta ->
                saludos."$respuesta"   
        }
}

Así es como separamos las pruebas del código; si las pruebas también es código, lo se.
La documentación en Internet de GroovyScriptEngine es más concreta en lo que puedes hacer con ella.

Pero hay algo raro aquí, si pones atención verás que la esencia del script se pierde un poquito al acoplar el código bajo una clase. Para eso está GroovyShell pero ya hablaré de esta utilidad en otra ocasión.

ClassPath S.O.S

Esta es otra que seguro ya te sabías, importar la clase, digo el script a probar al CLASSPATH.

def setClassPath = 'groovyc -classpath $CLASSPATH:./saludo_classpath.groovy;'.execute()
setClassPath.waitFor()

def _instance = new saludo_classpath()
def respuesta = 'sis'

assert respuesta in _instance.getSaludos()
_instance.isSaludoTrueMethod(respuesta)
_instance.isSaldoTrueClosure(respuesta)

La clase con el código de producción es el mismo que el anterior.

Notas: Los nombre tan raros de los scripts son porque según yo los scripts deben ser legibles.

Les agradezco el tiempo que se tomaron el leer esta entrada, espero le sirva a alguien.

Comentarios

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 Sr. Negativo

Un post muy útil para los que

Un post muy útil para los que nos gusta Groovy :D !!