Las pruebas son una parte fundamental del desarrollo de software, ya que aseguran que el código funcione como se espera y ayuda a identificar errores antes de que lleguen a producción. En Perl, existen varias herramientas y módulos que facilitan la creación y ejecución de pruebas. En esta sección, aprenderemos sobre los conceptos básicos de las pruebas en Perl, cómo escribir pruebas y cómo utilizar módulos de prueba populares.

Conceptos Básicos de Pruebas

Antes de sumergirnos en el código, es importante entender algunos conceptos clave:

  • Pruebas Unitarias: Prueban partes individuales del código (por ejemplo, funciones o subrutinas) de manera aislada.
  • Pruebas de Integración: Verifican que diferentes partes del sistema funcionen juntas correctamente.
  • Pruebas de Regresión: Aseguran que los cambios recientes no hayan introducido nuevos errores en el código existente.
  • Cobertura de Pruebas: Mide qué porcentaje del código ha sido ejecutado durante las pruebas.

Módulos de Prueba en Perl

Perl ofrece varios módulos para facilitar la escritura y ejecución de pruebas. Algunos de los más populares son:

  • Test::Simple
  • Test::More
  • Test::Exception
  • Test::Deep

Test::Simple

Test::Simple es un módulo básico que proporciona una función ok() para verificar si una condición es verdadera.

use Test::Simple tests => 1;

ok(1 + 1 == 2, '1 + 1 should equal 2');

Test::More

Test::More es una extensión de Test::Simple que ofrece más funciones para realizar pruebas. Es el módulo de prueba más utilizado en Perl.

use Test::More tests => 3;

is(1 + 1, 2, '1 + 1 should equal 2');
isnt(1 + 1, 3, '1 + 1 should not equal 3');
like('Hello World', qr/World/, 'String contains "World"');

Test::Exception

Test::Exception permite probar excepciones en el código.

use Test::More tests => 2;
use Test::Exception;

dies_ok { die "Error" } 'Code should die';
lives_ok { 1 + 1 } 'Code should not die';

Test::Deep

Test::Deep permite realizar comparaciones profundas de estructuras de datos complejas.

use Test::More tests => 1;
use Test::Deep;

cmp_deeply(
    { a => 1, b => [2, 3] },
    { a => 1, b => [2, 3] },
    'Deep comparison of hash with array'
);

Escribiendo Pruebas

Estructura de un Archivo de Pruebas

Un archivo de pruebas en Perl generalmente sigue esta estructura:

  1. Cargar módulos de prueba: Usualmente Test::More.
  2. Definir el número de pruebas: Esto puede ser un número fijo o no_plan si no se conoce de antemano.
  3. Escribir las pruebas: Usar funciones como is, ok, like, etc.
use Test::More tests => 3;

# Prueba 1
is(1 + 1, 2, '1 + 1 should equal 2');

# Prueba 2
isnt(1 + 1, 3, '1 + 1 should not equal 3');

# Prueba 3
like('Hello World', qr/World/, 'String contains "World"');

Ejecución de Pruebas

Para ejecutar las pruebas, se puede usar el comando prove que viene con Perl.

prove test_file.t

Ejercicio Práctico

Ejercicio 1: Pruebas Básicas

Escribe un archivo de pruebas que verifique las siguientes condiciones:

  1. La suma de 2 y 3 es 5.
  2. La cadena "Perl" contiene la letra "e".
  3. La función divide no debe lanzar una excepción cuando se divide 10 por 2.

Solución

# test_basic.t
use Test::More tests => 3;
use Test::Exception;

# Prueba 1
is(2 + 3, 5, '2 + 3 should equal 5');

# Prueba 2
like('Perl', qr/e/, 'String contains "e"');

# Prueba 3
sub divide {
    my ($a, $b) = @_;
    return $a / $b;
}

lives_ok { divide(10, 2) } 'divide(10, 2) should not die';

Ejercicio 2: Pruebas de Estructuras de Datos

Escribe un archivo de pruebas que verifique las siguientes condiciones:

  1. Un hash %data contiene las claves name y age.
  2. Un array @numbers contiene los números 1, 2 y 3.

Solución

# test_data_structures.t
use Test::More tests => 2;
use Test::Deep;

# Prueba 1
my %data = (name => 'Alice', age => 30);
cmp_deeply(\%data, {name => 'Alice', age => 30}, 'Hash contains name and age');

# Prueba 2
my @numbers = (1, 2, 3);
cmp_deeply(\@numbers, [1, 2, 3], 'Array contains 1, 2, 3');

Conclusión

En esta sección, hemos aprendido sobre la importancia de las pruebas en el desarrollo de software y cómo escribir y ejecutar pruebas en Perl utilizando módulos populares como Test::Simple, Test::More, Test::Exception y Test::Deep. Las pruebas ayudan a asegurar la calidad del código y a identificar errores antes de que lleguen a producción. Con la práctica, escribir pruebas se convertirá en una parte natural de tu flujo de trabajo de desarrollo.

En el siguiente tema, exploraremos cómo optimizar el rendimiento de tus programas en Perl.

© Copyright 2024. Todos los derechos reservados