En esta sección, aprenderás cómo probar y depurar tus scripts en Lua. La capacidad de identificar y corregir errores es crucial para cualquier programador. Este módulo te proporcionará las herramientas y técnicas necesarias para asegurar que tu código funcione correctamente y sea eficiente.

  1. Introducción a las Pruebas

1.1 ¿Qué son las Pruebas?

Las pruebas son un conjunto de actividades que se realizan para verificar que el software cumple con los requisitos especificados y funciona como se espera. Existen varios tipos de pruebas, pero en este módulo nos centraremos en las pruebas unitarias.

1.2 Pruebas Unitarias

Las pruebas unitarias son pruebas que se realizan a nivel de función o método. Su objetivo es verificar que cada unidad de código funcione correctamente de manera aislada.

Ejemplo de Prueba Unitaria

-- Definición de una función simple
function add(a, b)
    return a + b
end

-- Prueba unitaria para la función add
function test_add()
    assert(add(2, 3) == 5)
    assert(add(-1, 1) == 0)
    assert(add(0, 0) == 0)
    print("Todas las pruebas pasaron")
end

-- Ejecutar la prueba
test_add()

En este ejemplo, la función add se prueba con diferentes entradas para asegurarse de que produce los resultados esperados. La función assert se utiliza para verificar que las condiciones sean verdaderas. Si alguna condición falla, Lua lanzará un error.

  1. Herramientas de Pruebas en Lua

2.1 Busted

Busted es un marco de pruebas unitarias para Lua que facilita la escritura y ejecución de pruebas.

Instalación de Busted

Para instalar Busted, puedes usar LuaRocks, el gestor de paquetes para Lua:

luarocks install busted

Ejemplo de Prueba con Busted

-- Guardar este archivo como test_add.lua
describe("add function", function()
    it("should return the sum of two numbers", function()
        assert.are.equal(5, add(2, 3))
        assert.are.equal(0, add(-1, 1))
        assert.are.equal(0, add(0, 0))
    end)
end)

Para ejecutar la prueba, usa el siguiente comando:

busted test_add.lua

  1. Técnicas de Depuración

3.1 Uso de print

La forma más básica de depuración es usar la función print para mostrar valores de variables y mensajes en la consola.

Ejemplo de Depuración con print

function add(a, b)
    print("a:", a, "b:", b)  -- Imprimir los valores de a y b
    return a + b
end

print(add(2, 3))

3.2 Uso de assert

La función assert se puede utilizar para verificar condiciones y lanzar errores si la condición es falsa.

Ejemplo de Depuración con assert

function divide(a, b)
    assert(b ~= 0, "El divisor no puede ser cero")
    return a / b
end

print(divide(4, 2))
print(divide(4, 0))  -- Esto lanzará un error

3.3 Uso del Depurador de Lua

Lua proporciona un depurador integrado que permite establecer puntos de interrupción, inspeccionar variables y ejecutar código paso a paso.

Ejemplo de Uso del Depurador

-- Guardar este archivo como debug_example.lua
function factorial(n)
    if n == 0 then
        return 1
    else
        return n * factorial(n - 1)
    end
end

print(factorial(5))

Para depurar este script, puedes usar el siguiente comando:

lua -e "require('debug').debug()" debug_example.lua

Esto iniciará el depurador y te permitirá ejecutar comandos de depuración.

  1. Ejercicios Prácticos

Ejercicio 1: Prueba Unitaria

Escribe una función multiply que multiplique dos números y crea una prueba unitaria para verificar su funcionamiento.

Solución

function multiply(a, b)
    return a * b
end

function test_multiply()
    assert(multiply(2, 3) == 6)
    assert(multiply(-1, 1) == -1)
    assert(multiply(0, 5) == 0)
    print("Todas las pruebas pasaron")
end

test_multiply()

Ejercicio 2: Depuración

Escribe una función subtract que reste dos números. Introduce un error intencional y usa print y assert para depurar el problema.

Solución

function subtract(a, b)
    return a - b  -- Introduce un error intencional aquí, por ejemplo, a + b
end

function test_subtract()
    assert(subtract(5, 3) == 2)
    assert(subtract(0, 0) == 0)
    assert(subtract(-1, -1) == 0)
    print("Todas las pruebas pasaron")
end

test_subtract()

  1. Conclusión

En esta sección, has aprendido sobre la importancia de las pruebas y la depuración en la programación. Has visto cómo escribir pruebas unitarias y usar herramientas como Busted para facilitar el proceso de pruebas. También has aprendido técnicas básicas de depuración utilizando print, assert y el depurador de Lua. Estas habilidades son esenciales para asegurar que tu código sea robusto y libre de errores.

En el siguiente tema, aplicarás estos conocimientos en la implementación de tu proyecto final, asegurándote de que cada componente funcione correctamente y de manera eficiente.

© Copyright 2024. Todos los derechos reservados