Lua Academy · บทเรียน

ความครอบคลุมโค้ดและการตรวจวัดการทดสอบ

วัดความครอบคลุมของการทดสอบด้วย luacov และแปลความหมายรายงานความครอบคลุม

บทเรียน 4 จาก 413 ขั้นตอน

ความครอบคลุมโค้ดและการตรวจวัดการทดสอบ เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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 ตอนเริ่มต้น แล้วระบบจะบันทึกความครอบคลุมโดยอัตโนมัติ

-- 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)

การสร้าง report

หลังจากการทดสอบทำงานเสร็จ luacov จะเขียนไฟล์ luacov.stats.out จากนั้นเรียกใช้ luacov-reporter เพื่อสร้าง report ที่อ่านเข้าใจได้

# After tests:
luacov-reporter
# Produces luacov.report.out with per-file line coverage

การอ่าน report

แต่ละบรรทัดจะแสดงจำนวนครั้งที่ทำงาน จำนวนครั้งที่ไม่ทำงาน และบรรทัดต้นฉบับ บรรทัดที่มีจำนวนครั้งเป็น 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

เรียกใช้ luacov ในกระบวนการ CI ของคุณ อัปโหลด report ความครอบคลุมไปยัง Coveralls หรือ Codecov เพื่อติดตามแนวโน้มระหว่างคอมมิตต่าง ๆ

คำถามเกี่ยวกับความครอบคลุม

บรรทัดที่มีการทำงาน 0 ครั้งในรายงาน luacov บ่งชี้อะไร

บทสรุป: ความครอบคลุมโค้ดและการติดตั้งเครื่องมือวัดการทดสอบ

ใช้ luacov เพื่อบันทึกความครอบคลุมของบรรทัดและสร้างรายงาน กำหนดเกณฑ์ขั้นต่ำของความครอบคลุมใน CI เพิ่มการติดตั้งเครื่องมือวัดแบบกำหนดเองด้วย debug.sethook สำหรับการติดตามเฉพาะทาง ใช้ม็อกเพื่อแยกการทดสอบหน่วยและตรวจสอบจำนวนครั้งที่เรียกใช้

เริ่มต้นได้ฟรี

เรียนรู้ Lua ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
40
บทเรียน
159

คำถามที่พบบ่อย

บทเรียน “ความครอบคลุมโค้ดและการตรวจวัดการทดสอบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ความครอบคลุมโค้ดและการตรวจวัดการทดสอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ความครอบคลุมโค้ดและการตรวจวัดการทดสอบ”

วัดความครอบคลุมของการทดสอบด้วย luacov และแปลความหมายรายงานความครอบคลุม คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ความครอบคลุมโค้ดและการตรวจวัดการทดสอบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ไลบรารี debug เชิงลึก
  2. การดีบักระยะไกลด้วย MobDebug
  3. การสร้างโพรไฟล์ด้วย LuaProfiler
  4. ความครอบคลุมโค้ดและการตรวจวัดการทดสอบ
← กลับไปที่ Lua Academy