0Pricing
Lua Academy · درس

تغطية الشيفرة وقياس الاختبارات

قِس تغطية الاختبارات باستخدام luacov وفسّر تقارير التغطية

تغطية الشيفرة وقياس الاختبارات درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

ما هو اختبار تغطية التعليمات البرمجية؟

تقيس تغطية التعليمات البرمجية الأسطر أو الفروع أو الدوال التي تنفذها الاختبارات. تمنح التغطية المرتفعة ثقة بأن الاختبارات تختبر التعليمات البرمجية بصورة جيدة.

luacov: الأداة القياسية

luacov هي أداة تغطية Lua القياسية. وتتصل بطبقة debug في 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)

إنشاء تقرير

بعد تشغيل الاختبارات، يكتب 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

شغّل luacov في مسار CI الخاص بك. ارفع تقارير التغطية إلى Coveralls أو Codecov لتتبع الاتجاهات عبر عمليات الإيداع.

سؤال حول التغطية

ماذا يشير إليه السطر الذي يحتوي على 0 إصابة في تقرير luacov؟

مراجعة: تغطية التعليمات البرمجية وتجهيز الاختبارات

استخدم luacov لتسجيل تغطية الأسطر وإنشاء التقارير. حدّد حدود التغطية في CI. أضف أدوات قياس مخصّصة باستخدام debug.sethook لتتبّع متخصص. استخدم الكائنات الوهمية لعزل اختبارات الوحدة والتحقق من عدد الاستدعاءات.

الأسئلة الشائعة

هل درس «تغطية الشيفرة وقياس الاختبارات» مجاني؟

نعم — نص درس «تغطية الشيفرة وقياس الاختبارات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «تغطية الشيفرة وقياس الاختبارات»؟

قِس تغطية الاختبارات باستخدام luacov وفسّر تقارير التغطية تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «تغطية الشيفرة وقياس الاختبارات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مكتبة debug بالتفصيل
  2. التنقيح عن بُعد باستخدام MobDebug
  3. تحليل الأداء باستخدام LuaProfiler
  4. تغطية الشيفرة وقياس الاختبارات
← العودة إلى Lua Academy