コードカバレッジとテスト計測
luacovでテストカバレッジを測定し、カバレッジレポートを解釈します。
「コードカバレッジとテスト計測」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
コードカバレッジとは
コードカバレッジは、テストによってコードのどの行、分岐、関数が実行されたかを測定します。カバレッジが高いと、テストがコードを十分に検証しているという信頼性が高まります。
luacov:標準ツール
luacov は Lua の標準的なカバレッジツールです。Lua のデバッグ層にフックし、実行された行を記録します。
-- Run with luacov:
luacov script.lua
-- Or require at the start of the test file:
require("luacov")テストランナーでの luacov の使用
busted またはカスタムランナーで、開始時に luacov を require すると、カバレッジが自動的に記録されます。
-- 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)レポートの生成
テストの実行後、luacov は luacov.stats.out ファイルを書き出します。luacov-reporter を実行すると、人間が読みやすいレポートを生成できます。
# After tests:
luacov-reporter
# Produces luacov.report.out with per-file line coverageレポートの読み方
各行には、ヒット回数、未ヒット回数、ソース行が表示されます。ヒット数が 0 の行はカバレッジされていないコードであり、不要なコードやテストケースの不足が疑われます。
分岐カバレッジ
luacov が追跡するのは行カバレッジであり、分岐カバレッジではありません。分岐カバレッジには、より高度なツールを使用するか、すべての if/else パスに対するテストケースを手動で追加します。
カスタムカバレッジフック
行イベント用の debug.sethook を使用して、最小限のカバレッジ記録機能を構築します。
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()カバレッジのしきい値
CI で最小カバレッジしきい値(例:80%)を設定します。カバレッジがそれを下回った場合はビルドを失敗させます。これにより、不要なコードが誤って蓄積されるのを防げます。
テスト計測のパターン
カバレッジ以外にも、テストに実行時間(遅いテストの検出)、呼び出し回数のアサーション(関数が想定回数呼び出されたことの確認)、値の取得(モック関数に渡された引数の記録)を組み込みます。
テスト分離のためのモック
テスト中に実際のモジュールをモックに置き換えて、単体を分離します。実際の関数を保存し、追跡用スタブに置き換え、テスト後に元に戻します。
local realSend = http.send
local calls = {}
http.send = function(...) calls[#calls+1] = {...} end
-- run tests --
http.send = realSend -- restore
print(#calls, "send calls")CI との統合
CI パイプラインで luacov を実行します。カバレッジレポートを Coveralls または Codecov にアップロードして、コミット間の推移を追跡します。
カバレッジに関する質問
luacovレポートでヒット数が0の行は、何を示していますか?
復習:コードカバレッジとテスト計装
luacovを使用して行カバレッジを記録し、レポートを生成します。CIのカバレッジしきい値を設定します。特殊な追跡には、カスタムのdebug.sethook計装を追加します。ユニットテストの分離と呼び出し回数の検証にはモックを使用します。
よくある質問
「コードカバレッジとテスト計測」レッスンは無料ですか?
はい。「コードカバレッジとテスト計測」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「コードカバレッジとテスト計測」で何を学びますか?
luacovでテストカバレッジを測定し、カバレッジレポートを解釈します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「コードカバレッジとテスト計測」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- debugライブラリ詳説
- MobDebugによるリモートデバッグ
- LuaProfilerによるプロファイリング
- コードカバレッジとテスト計測