Introducción al Desarrollo de Aplicaciones con Groovy y Grails (Parte 4)

June 2, 2009 – 5:49 pm
Tags: , ,

Pruebas Unitarias de Proyectos Grails

Grails soporta los conceptos de “Pruebas Unitarias” y “Pruebas de Integración“.
Las “pruebas unitarias” se orientan a pruebas pequeñas de ejecución rápida que no soportan carga de Componentes.  Las “pruebas de integración” se encargan de evalular el ambiente en el que se ejecuta el aplicativo.

Para nuestro ejemplo vamos a modificar el archivo “ProjectTests.groovy“  (Este archivo se encuentra dentro de la carpeta   “\issuetracker\test\unit\” .  Grails crea automáticamente Archivos de pruebas para las entidades del dominio creadas previamente) :

import grails.test.*
 
class ProjectTests extends GrailsUnitTestCase {
    protected void setUp() {
        super.setUp()
    }
 
    protected void tearDown() {
        super.tearDown()
    }
 
    //Test sin errores
    void testSomething() {
    	Project hs = new Project(name:"hello world")
        assertEquals "hello world", hs.name
    }
 
    //Test con errores
    void testSomethingFails() {
    	Project hs = new Project(name:"hello world")
        assertEquals "hello world failed", hs.name
    }
}

En este ejemplo vemos dos pruebas testsomething y testsomethingfails.

Para ejecutar el conjunto de pruebas unitarias del proyecto ejecutamos el comando:

>> F:\dev\issuetracker>grails test-app

Para nuestro ejemplo la consola debería mostrar un mensaje similar al siguiente:

Starting unit tests ...
Running tests of type 'unit'
-------------------------------------------------------
Running 4 unit tests...
Running test ComponentTests...PASSED
Running test IssueTests...PASSED
Running test ProjectTests...
                    testSomethingFails...FAILED
Tests Completed in 312ms ...
-------------------------------------------------------
Tests passed: 3
Tests failed: 1
-------------------------------------------------------

Adicionalmente grails genera un reporte en la siguiente ruta: F:\dev\issuetracker\test\reports\html\index.html. A continuación un pantallazo del reporte:

Pruebas Funcionales de Proyectos Grails

Además de pruebas unitarias , Grails también soporta pruebas funcionales utilizando Canoo WebTest. (Canoo WebTest es una herramienta de software libre destinada para la automatización de pruebas de aplicaciones web.)

Para instalar el plugin de pruebas funcionales ejecutamos el siguiente comando:

F:\dev\issuetracker>grails install-plugin webtest

(Nota: Durante la instalación del plugin el instalador pedirá también la instalación de WebTest)

Para crear una prueba funcional de nuestra clase de dominio Project, ejecutamos el siguiente comando:

F:\dev\issuetracker>grails create-webtest Project

Grails creará el siguiente archivo: “/issuetracker/webtest/tests/ProjectTest.groovy“  con el siguiente contenido:

class ProjectTest extends grails.util.WebTest {
 
    // Unlike unit tests, functional tests are sometimes sequence dependent.
    // Methods starting with 'test' will be run automatically in alphabetical order.
	// If you require a specific sequence, prefix the method name (following 'test') with a sequence
	// e.g. test001ProjectListNewDelete
 
    def testProjectListNewDelete() {
            invoke      'project'
            verifyText  'Home'
 
            verifyListSize 0
 
            clickLink   'New Project'
            verifyText  'Create Project'
            clickButton 'Create'
            verifyText  'Show Project', description:'Detail page'
            clickLink   'List', description:'Back to list view'
 
            verifyListSize 1
 
            group(description:'edit the one element') {
                showFirstElementDetails()
                clickButton 'Edit'
                verifyText  'Edit Project'
                clickButton 'Update'
                verifyText  'Show Project'
                clickLink   'List', description:'Back to list view'
            }
 
            verifyListSize 1
 
            group(description:'delete the only element') {
                showFirstElementDetails()
                clickButton 'Delete'
                verifyXPath xpath:  "//div[@class='message']",
                            text:   /.*Project.*deleted.*/,
                            regex:  true
            }
 
            verifyListSize 0
    }
 
    String ROW_COUNT_XPATH = "count(//div[@class='list']//tbody/tr)"
 
    def verifyListSize(int size) {
        ant.group(description:"verify Project list view with $size row(s)") {
            verifyText  'Project List'
            verifyXPath xpath:      ROW_COUNT_XPATH,
                        text:       size,
                        description:"$size row(s) of data expected"
        }
    }
 
    def showFirstElementDetails() {
        clickLink   '1', description:'go to detail view'
    }
}

Para ejecutar la prueba escribimos el comando:

> F:\dev\issuetracker>grails run-webtest

Se generará un reporte como el siguiente:

Puede encontrar un listado de completo para pruebas de canoo en la siguiente ubicación: http://webtest.canoo.com/webtest/manual/manualOverview.html

Adicionalmente puede utilizar la herramienta WebTestRecorder.

Enlaces Relacionados:

  • Share/Bookmark

Post a Comment