Pruebas Unitarias en Drupal (Unit Testing)

El unit testing es una práctica que consiste en tomar una pequeña porción de código y someterlo a unas pruebas de programación para probar su corrección. Por lo general someteremos a prueba funciones o pequeñas funcionalidades específicas con un conjunto de parámetros controlados que nos servirán para hacer las comprobaciones necesasias en función de los valores de retorno de la funcionalidad testeada.

Utilidades

  1. Ayudan a producir un código de mayor calidad.
  2. Detección rápida de errores cuando se programan nuevas funcionalidades o se realizan cambios en el código.

  3. Sirven como pequeña fuente de documentación sobre qué es lo que se espera que haga el código.

  4. Realizar unit tests “obliga” al programador a escribir el código en pequeñas porciones con el fin de que puedan ser probadas independientemente.

 

En el caso de Drupal la herramienta principal que usaremos será el módulo SimpleTest. Este módulo es una adaptación a Drupal del “proyecto SimpleTest de PHP”. Este módulo añade una gran cantidad de herramientas para la realización de las pruebas como por ejemplo crear nuevos usuarios, cambiar variables de configuración, establecer permisos a usuarios, etc.

 

Ahora vamos a probar simpletest en nuestro portal....

 

INSTALACION

Simpletest

Notas

  1. Es necesario tener instalada la librería php-curl en nuestro servidor.
  2. Es necesario aplicar el parche D6-core-simpletest.patch (situado dentro del módulo) en la aplicación (Realizar sólo en versiones de desarrollo).

  3. Es recomendable tener instalado el módulo schema: http://drupal.org/project/schema en nuestra aplicación para la realización de tests más avanzados.

EJECUCIÓN DE LOS TESTS

  • En la ruta “admin/build/simpletest” (Administracion >> Estructura >> Pruebas) obtendremos un listado de todos los tests disponibles en nuestra aplicación, gran cantidad de módulos aportados por la comunidad ya poseen tests de sus funcionalidades.

    Para lanzar las pruebas simplemente tendremos activar los checkbox de los módulos sobre los que queremos realizar los tests y pulsar el botón “Run Tests”, la ejecución nos devolverá un reporte sobre los tests realizados y su estado.

  • Al realizar los tests de algunas módulos es necesario que se cree un esquema de base de datos paralelo de prueba para realizarlos (el sistema lo genera automáticamente) por lo que es recomendable una vez ejecutados los tests realizar la limpieza de la base de datos pulsando el botón “Clean Environment”

CREACIÓN DE UN TEST

  • Para la creación de nuestro test vamos a comenzar creando una carpeta llamada “tests” dentro del módulo sobre el que vayamos a realizar las pruebas.

  • Ahora crearemos el archivo que será nuestro test, lo llamaremos por ejemplo “MITEST.test” con la siguiente estructura:

     

    class MiTest extends DrupalWebTestCase {

    //Esta será la clase que crearemos para poder ejecutar los tests

    }

 

Podemos comprobar que nuestra clase extenderá de DrupalWebTestCase, que contiene todas las funiciones especificas de comprobación.

Dentro crearemos dos funciones básicas importantes y nuestra propia función:

- GetInfo que sirve para establecer un título y una descripción a nuestro test y para que el sistema lo reconozca.

 

function getInfo() {

         return array(

           'name' => t('Nombre de nuestro tests'),

           'description' => t('Funcionalidad del módulo XXXX.'),

           'group' => 'MYGRUPO',

        );

}

- SetUp que se ejecutará antes de lanzar los tests y en la que podremos realizar las acciones necesarias para que los tests se ejecuten correctamente como incluir archivos, activar módulos, crear usuarios, realizar el login de un usuario creado, etc y que serán accesibles por todos los tests.

 

function setUp() {

    parent::setUp('blog');

    //habilitamos el módulo blog para poder usarlo en el test

 

    $permissions = array('access administration pages', 'administer site configuration', 'administer content types', 'administer nodes', 'administer files', 'access seochecklist content');

 

    $this->admin_user = $this->drupalCreateUser($permissions);

    $this->drupalLogin($this->admin_user);

   //creamos el usuario con los permisos establecidos y lo autenticamos en el portal

}

 

- Y ahora nuestro test, lo llamaremos testCustomTest por ejemplo y en él vamos a realizar la creación de una entrada de blog(un nodo) y la comprobación de su existencia en la base de datos.

 

function testCustomTest() {

   $edit = array();

   $edit['title'] = 'SimpleTest titulo ! ' . $this->randomName(12);

   $title = $edit['title'];

   $edit['body'] = '!SimpleTest cuerpo! . ' ' . $this->randomName(50);

 

   $this->drupalPost('node/add/blog', $edit, 'Save');

   //guardamos los datos de la entrada de blog.

 

   $this->assertRaw(t("has been created."), 'Entrada de blog guardada correctamente');

   //comprobamos que ha sido creado correctamente

 

   $node = node_load(array('title' => $edit['title']));

   $this->assertNotNull($node, 'Nodo encontrado en la Base de Datos. %s');

   //cargamos el nodo de la base de datos y comprobamos que existe.

}

 

Ahora podremos ejecutar nuestro tests de la forma anteriormente explicada. Si en el listado el test que acabamos de crear no aparece deberemos vaciar la caché.

 

Documentación(en inglés):

Publicar nuevo comentario

  • Las direcciones de páginas web y las direcciones de correo se convierten automáticamente en enlaces.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Las líneas y los párrafos se terminan automáticamente.

Más información sobre las opciones de formateo

CAPTCHA

Esta pregunta se hace para comprobar que es usted una persona real e impedir el envío automatizado de mensajes basura.
Imagen de CAPTCHA
Escriba los caracteres (sin espacios) que se deben mostrar en la imagen.