Codeabdeckung und Testinstrumentierung
Messen Sie die Testabdeckung mit luacov und interpretieren Sie Abdeckungsberichte
Codeabdeckung und Testinstrumentierung ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist Codeabdeckung?
Die Codeabdeckung misst, welche Zeilen, Verzweigungen oder Funktionen Ihres Codes von Tests ausgeführt werden. Eine hohe Abdeckung schafft Vertrauen, dass die Tests den Code gründlich ausführen.
luacov: Das Standardwerkzeug
luacov ist das Standardwerkzeug für Codeabdeckung in Lua. Es klinkt sich in die Lua-Debug-Ebene ein und zeichnet auf, welche Zeilen ausgeführt werden.
-- Run with luacov:
luacov script.lua
-- Or require at the start of the test file:
require("luacov")luacov mit einem Test-Runner verwenden
Bei Verwendung von busted oder eines benutzerdefinierten Runners binden Sie luacov am Anfang ein; anschließend zeichnet es die Abdeckung automatisch auf.
-- 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)Einen Bericht erstellen
Nach der Ausführung der Tests schreibt luacov eine Datei luacov.stats.out. Führen Sie luacov-reporter aus, um einen für Menschen lesbaren Bericht zu erstellen.
# After tests:
luacov-reporter
# Produces luacov.report.out with per-file line coverageDen Bericht lesen
Jede Zeile zeigt: Trefferanzahl, Anzahl der Fehltreffer und die Quelltextzeile. Zeilen mit 0 Treffern enthalten nicht abgedeckten Code – möglicherweise toten Code oder fehlende Testfälle.
Abdeckung von Verzweigungen
luacov erfasst die Zeilenabdeckung, nicht die Abdeckung von Verzweigungen. Für die Verzweigungsabdeckung verwenden Sie ein fortgeschritteneres Werkzeug oder fügen Sie manuell Testfälle für jeden if/else-Pfad hinzu.
Benutzerdefinierter Abdeckungs-Hook
Erstellen Sie mit debug.sethook für Zeilenereignisse einen minimalen Aufzeichner für die Codeabdeckung.
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()Abdeckungsschwellenwerte
Legen Sie in CI einen Mindestschwellenwert für die Abdeckung fest (z. B. 80 %). Schlagen Sie den Build fehl, wenn die Abdeckung darunter fällt. So verhindern Sie, dass sich versehentlich toter Code ansammelt.
Muster für Testinstrumentierung
Instrumentieren Sie Tests über die Abdeckung hinaus mit folgenden Messungen: Ausführungszeit (um langsame Tests zu erkennen), Assertions zur Aufrufanzahl (um zu überprüfen, dass Funktionen erwartungsgemäß oft aufgerufen werden) und Werterfassung (um an Mock-Funktionen übergebene Argumente aufzuzeichnen).
Mocking zur Testisolierung
Ersetzen Sie beim Testen echte Module durch Mocks, um Einheiten zu isolieren. Speichern Sie die echte Funktion, ersetzen Sie sie durch einen protokollierenden Stub und stellen Sie sie nach dem Test wieder her.
local realSend = http.send
local calls = {}
http.send = function(...) calls[#calls+1] = {...} end
-- run tests --
http.send = realSend -- restore
print(#calls, "send calls")Integration in CI
Führen Sie luacov in Ihrer CI-Pipeline aus. Laden Sie Abdeckungsberichte zu Coveralls oder Codecov hoch, um Trends über mehrere Commits hinweg zu verfolgen.
Frage zur Testabdeckung
Was zeigt eine Zeile mit 0 Treffern in einem luacov-Bericht an?
Zusammenfassung: Testabdeckung und Testinstrumentierung
Verwenden Sie luacov, um die Zeilenabdeckung zu erfassen und Berichte zu erstellen. Legen Sie Schwellenwerte für die Abdeckung in der CI fest. Fügen Sie für eine spezialisierte Nachverfolgung eine eigene Instrumentierung mit debug.sethook hinzu. Verwenden Sie Mocks, um Unit-Tests zu isolieren und die Anzahl der Aufrufe zu überprüfen.
Lerne Lua mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 40
- Lektionen
- 159
Häufig gestellte Fragen
Ist die Lektion „Codeabdeckung und Testinstrumentierung“ kostenlos?
Ja — der vollständige Text von „Codeabdeckung und Testinstrumentierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Codeabdeckung und Testinstrumentierung“?
Messen Sie die Testabdeckung mit luacov und interpretieren Sie Abdeckungsberichte Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Codeabdeckung und Testinstrumentierung“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Die debug-Bibliothek im Detail
- Remote-Debugging mit MobDebug
- Profiling mit LuaProfiler
- Codeabdeckung und Testinstrumentierung