Go Academy · درس

تغطية الاختبار وtestify

‏go test -cover ومكتبة تأكيدات testify

الدرس 4 من 413 خطوة

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

go test -cover

أضف -cover إلى أي أمر go test لطباعة نسبة التغطية لكل حزمة.

go test -cover ./...
// ok  myapp 68.4% of statements

ملف تعريف التغطية

أنشئ ملف تعريف للتغطية واعرضه بتنسيق HTML لمعرفة الأسطر التي غطتها الاختبارات:

go test -coverprofile=c.out ./...
go tool cover -html=c.out -o coverage.html

حدود التغطية في CI

فرض حد أدنى للتغطية باستخدام أمر shell في سطر واحد:

pct=$(go test -cover ./... | awk '/coverage/ {gsub(/%/,""); print $NF}')
[ "${pct%.*}" -ge 80 ] || { echo "Coverage $pct% below 80%"; exit 1; }

التغطية بنسبة 100% ليست الهدف

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

testify/assert

توفر github.com/stretchr/testify/assert تأكيدات واضحة تعرض القيم المتوقعة والفعلية تلقائيًا:

assert.Equal(t, 42, result)
assert.NoError(t, err)
assert.Contains(t, list, "item")
assert.True(t, isValid)

testify/require

يتطابق require مع assert، لكنه يستدعي t.FailNow() عند الفشل، فيوقف الاختبار فورًا (مثل t.Fatal).

require.NoError(t, err) // stop if err != nil
// Subsequent code only runs if err is nil

testify/suite

تجمع testify/suite الاختبارات المرتبطة في بنية ذات إعداد وتنظيف مشتركين، على نحو مشابه لمجموعات اختبارات xUnit:

type UserSuite struct { suite.Suite; db *DB }
func (s *UserSuite) SetupTest() { s.db = openTestDB() }
func (s *UserSuite) TestCreate() { /* ... */ }
func TestUserSuite(t *testing.T) { suite.Run(t, new(UserSuite)) }

assert.ElementsMatch

قارن الشرائح دون الاهتمام بالترتيب:

assert.ElementsMatch(t, []int{3,1,2}, []int{1,2,3})

assert.JSONEq

قارن سلاسل JSON بغض النظر عن ترتيب المفاتيح:

assert.JSONEq(t, `{"a":1,"b":2}`, `{"b":2,"a":1}`)

تأكيدات مخصصة

أنشئوا دوال مساعدة خاصة بكم لتغليف testify وإضافة سياق المجال إلى رسائل الفشل:

func assertUserValid(t testing.TB, u *User) {
    t.Helper()
    assert.NotEmpty(t, u.Name)
    assert.Positive(t, u.ID)
}

دمج التغطية مع testify

لا يؤثر testify في تقارير التغطية؛ فالتغطية تهتم فقط بتنفيذ الأسطر، بصرف النظر عن مكتبة التأكيدات المستخدمة.

تحقق سريع

ما الفرق بين testify/assert وtestify/require؟

مراجعة: التغطية وtestify

النقاط الأساسية:

  • go test -cover؛ واستخدموا -coverprofile لإنشاء تقرير HTML
  • assert: المتابعة عند الفشل؛ require: التوقف عند الفشل
  • testify/suite للاختبارات المجمّعة التي تشترك في إعداد واحد
  • التغطية المرتفعة جيدة؛ لكن التأكيدات ذات المعنى أفضل
البدء مجانًا

تعلم Go مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
51
الدروس
203

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

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

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

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

‏go test -cover ومكتبة تأكيدات testify تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

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

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

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

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

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

  1. كتابة اختبارات الوحدات باستخدام testing
  2. الاختبارات المعتمدة على الجداول
  3. بدائل الاختبار: Mocks وStubs
  4. تغطية الاختبار وtestify
← العودة إلى Go Academy