Cobertura de código e instrumentación de pruebas
Mida la cobertura de las pruebas con luacov e interprete los informes de cobertura.
Cobertura de código e instrumentación de pruebas es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué es la cobertura de código?
La cobertura de código mide qué líneas, ramas o funciones del código ejecutan las pruebas. Una cobertura elevada indica que las pruebas ejercitan correctamente el código.
luacov: la herramienta estándar
luacov es la herramienta estándar de cobertura de Lua. Se conecta a la capa de depuración de Lua y registra qué líneas se ejecutan.
-- Run with luacov:
luacov script.lua
-- Or require at the start of the test file:
require("luacov")Uso de luacov con un ejecutor de pruebas
Con busted o con un ejecutor personalizado, requiera luacov al principio y registrará automáticamente la cobertura.
-- spec/all_spec.lua
require("luacov")
describe("my module", function()
it("does something", function()
local m = require("mymodule")
assert.equals(m.add(1,2), 3)
end)
end)Generación de un informe
Después de ejecutar las pruebas, luacov escribe un archivo luacov.stats.out. Ejecute luacov-reporter para generar un informe legible.
# After tests:
luacov-reporter
# Produces luacov.report.out with per-file line coverageLectura del informe
Cada línea muestra: número de ejecuciones, número de omisiones y la línea de origen. Las líneas con 0 ejecuciones son código no cubierto: posibles fragmentos de código muerto o casos de prueba que faltan.
Cobertura de ramas
luacov realiza un seguimiento de la cobertura de líneas, no de la cobertura de ramas. Para obtener cobertura de ramas, utilice una herramienta más avanzada o añada manualmente casos de prueba para cada ruta de if/else.
Hook de cobertura personalizado
Construya un registrador de cobertura mínimo con debug.sethook para los eventos de línea.
local covered = {}
debug.sethook(function(event, line)
local info = debug.getinfo(2, "S")
local src = info.short_src
covered[src] = covered[src] or {}
covered[src][line] = (covered[src][line] or 0) + 1
end, "l")
-- ... run tests ...
debug.sethook()Umbrales de cobertura
Establezca un umbral mínimo de cobertura en CI (por ejemplo, 80 %). Haga que la compilación falle si la cobertura cae por debajo de ese valor. Así evitará que se acumule código muerto accidentalmente.
Patrones de instrumentación de pruebas
Además de la cobertura, instrumente las pruebas con lo siguiente: tiempo de ejecución (para detectar pruebas lentas), aserciones sobre el número de llamadas (para verificar que las funciones se llamen el número esperado de veces) y captura de valores (para registrar los argumentos que se pasan a funciones simuladas).
Uso de mocks para aislar las pruebas
Sustituya los módulos reales por mocks durante las pruebas para aislar las unidades. Guarde la función real, sustitúyala por un stub de seguimiento y restáurela después de la prueba.
local realSend = http.send
local calls = {}
http.send = function(...) calls[#calls+1] = {...} end
-- run tests --
http.send = realSend -- restore
print(#calls, "send calls")Integración con CI
Ejecute luacov en su canalización de CI. Cargue los informes de cobertura en Coveralls o Codecov para hacer un seguimiento de las tendencias entre commits.
Pregunta sobre cobertura
¿Qué indica una línea con 0 aciertos en un informe de luacov?
Repaso: cobertura de código e instrumentación de pruebas
Utilice luacov para registrar la cobertura de líneas y generar informes. Establezca umbrales de cobertura en CI. Añada instrumentación personalizada con debug.sethook para realizar un seguimiento especializado. Use mocks para aislar las pruebas unitarias y verificar el número de llamadas.
Preguntas frecuentes
¿La lección «Cobertura de código e instrumentación de pruebas» es gratis?
Sí — el texto completo de «Cobertura de código e instrumentación de pruebas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Cobertura de código e instrumentación de pruebas»?
Mida la cobertura de las pruebas con luacov e interprete los informes de cobertura. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Cobertura de código e instrumentación de pruebas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- La biblioteca debug en profundidad
- Depuración remota con MobDebug
- Perfilado con LuaProfiler
- Cobertura de código e instrumentación de pruebas