Code coverage e strumentazione dei test
Misuri la copertura dei test con luacov e interpreti i report di copertura.
Code coverage e strumentazione dei test è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Che cos'è la copertura del codice
La copertura del codice misura quali righe, rami o funzioni del codice vengono eseguiti dai test. Una copertura elevata dà maggiore fiducia nel fatto che i test esercitino correttamente il codice.
luacov: lo strumento standard
luacov è lo strumento standard per la copertura del codice Lua. Si collega al livello di debug di Lua e registra le righe che vengono eseguite.
-- Run with luacov:
luacov script.lua
-- Or require at the start of the test file:
require("luacov")Utilizzo di luacov con un test runner
Con busted o con un runner personalizzato, carichi luacov con require all'avvio: la copertura verrà registrata automaticamente.
-- 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)Generazione di un report
Al termine dei test, luacov scrive un file luacov.stats.out. Esegua luacov-reporter per generare un report leggibile.
# After tests:
luacov-reporter
# Produces luacov.report.out with per-file line coverageLettura del report
Ogni riga mostra: numero di esecuzioni, numero di mancate esecuzioni e riga sorgente. Le righe con 0 esecuzioni sono codice non coperto, potenzialmente codice morto o casi di test mancanti.
Copertura dei rami
luacov tiene traccia della copertura delle righe, non di quella dei rami. Per la copertura dei rami, utilizzi uno strumento più avanzato oppure aggiunga manualmente casi di test per ogni percorso if/else.
Hook personalizzato per la copertura
Costruisca un registratore minimale della copertura utilizzando debug.sethook per gli eventi di riga.
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()Soglie di copertura
Imposti una soglia minima di copertura nella CI, ad esempio l'80%. Faccia fallire la build se la copertura scende al di sotto di tale soglia. In questo modo si evita l'accumulo accidentale di codice morto.
Pattern di strumentazione dei test
Oltre alla copertura, strumentalizzi i test con: tempo di esecuzione, per rilevare i test lenti; asserzioni sul numero di chiamate, per verificare che le funzioni vengano chiamate il numero di volte previsto; e acquisizione dei valori, per registrare gli argomenti passati alle funzioni simulate.
Mock per l'isolamento dei test
Sostituisca i moduli reali con mock durante i test per isolare le unità. Salvi la funzione reale, la sostituisca con uno stub di monitoraggio e la ripristini dopo il test.
local realSend = http.send
local calls = {}
http.send = function(...) calls[#calls+1] = {...} end
-- run tests --
http.send = realSend -- restore
print(#calls, "send calls")Integrazione con la CI
Esegua luacov nella pipeline CI. Carichi i report di copertura su Coveralls o Codecov per monitorare l'andamento tra i vari commit.
Domanda sulla copertura
Che cosa indica una riga con 0 occorrenze in un report di luacov?
Riepilogo: copertura del codice e strumentazione dei test
Utilizzi luacov per registrare la copertura delle righe e generare report. Imposti soglie di copertura nella CI. Aggiunga la strumentazione personalizzata con debug.sethook per un monitoraggio specializzato. Utilizzi mock per isolare i test unitari e verificare il numero di chiamate.
Domande Frequenti
La lezione «Code coverage e strumentazione dei test» è gratuita?
Sì — il testo completo di «Code coverage e strumentazione dei test» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Code coverage e strumentazione dei test»?
Misuri la copertura dei test con luacov e interpreti i report di copertura. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Code coverage e strumentazione dei test»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- La libreria debug in dettaglio
- Debug remoto con MobDebug
- Profilazione con LuaProfiler
- Code coverage e strumentazione dei test