TDD en Drupal

Implementar metodologías de desarrollo Ágiles como el TDD, BDD, ATDD es posible en Drupal, a partir de la utilización del módulo SimpleTest que viene implementado en el Core de Drupal 7 y que es posible de incluir desde a traves de un modulo (y parchando el núcleo).  Pressflow una distribución de alto rendimiento basada en Drupal 6 incluye la funcionalidad de testing. Para poder relizar pruebas unitarias se necesita incluir en el archivo .info de declaración de módulos una línea indicando los archivos que se utilizarán para la pruebas:

name = Blog
description = Enables multi-user blogs.
package = Core
version = VERSION
core = 7.x
files[] = blog.test

En la última línea del .info file naterior del módulo block, se incluye un archivo de pruebas.  Este archivo se define con la clausula files como se muestra.  Si se escriben más archivos de pruebas se deben incluir en el .info files de la misma manera.

<?php

/**
 * @file
 * Tests for blog.module.
 */

class BlogTestCase extends DrupalWebTestCase {

El código anterios muestra la parte de la cabecera utilizada para definir un archivo de pruebas (tests), como se observa se deriva de la clase DrupalWebTestCase, a partir de ella se definiran algunos métodos que serviran de inicialización de los casos de prueba. Los métdos que se utilizan para inicializar se muestran en el siguiente código:

  public static function getInfo() {
    return array(
      'name' => 'Blog functionality',
      'description' => 'Create, view, edit, delete, and change blog entries and verify its consistency in the database.',
      'group' => 'Blog',
    );
  }

Este segmnento de código muestra la defición de la sección, la cual aparecerá en la sección pruebas del panel de control.  otra métodp importante del código en la defición de pruebas es el método setUp()

  function setUp() {
    parent::setUp('blog');
    // Create users.
    $this->big_user = $this->drupalCreateUser(array('administer blocks'));
    $this->own_user = $this->drupalCreateUser(array('create blog content', 'edit own blog content', 'delete own blog content'));
    $this->any_user = $this->drupalCreateUser(array('create blog content', 'edit any blog content', 'delete any blog content', 'access administration pages'));
  }

Este método define parametros o el escenario inicial para la aplicación de la prueba. Como se muestra al ser la implementación de Simpletest basada en clases la implementación de los test se basa programación orientada a objetos.  El siguiente ejemplo muestra parte del código del módulos block de Drupal en el que se implementan una prueba.

  function testBlogPageNoEntries() {
    $this->drupalLogin($this->big_user);

    $this->drupalGet('blog/' . $this->own_user->uid);
    $this->assertResponse(200);
    $this->assertTitle(t("@name's blog", array('@name' => format_username($this->own_user))) . ' | Drupal', t('Blog title was displayed'));
    $this->assertText(t('@author has not created any blog entries.', array('@author' => format_username($this->own_user))), t('Users blog displayed with no entries'));
  }

En los últimos años las metodologías ágiles han demostrado ser adecuadas para el desarrollo de software de manera exitosa y las compañías más sobresalientes basan el diseño e implementación de sus proyectos basdados en estas metodologías.

Para mayores referencias al respecto revisar:

http://drupal.org/simpletest

http://drupal.org/node/811254

 

 

Tags: 

Añadir nuevo comentario

Basic HTML

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

Plain text

  • No se permiten etiquetas HTML.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.