Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الاختبار والتكامل

جزء من قسم Object Oriented Programming في رحلة GO على Coddy — الدرس 104 من 107.

challenge icon

التحدي

سهل

دعونا نكمل دورة نظام إدارة المكتبة الخاص بنا من خلال كتابة اختبارات تتحقق من أن كل شيء يعمل بشكل صحيح! ستقوم بإنشاء ملف اختبار يتحقق من الوظائف الأساسية لمكتبتك — مما يضمن إمكانية استعارة الكتب وإعادتها بشكل صحيح، ومعالجة حالات الخطأ بشكل سليم.

ستقوم بتنظيم الكود الخاص بك عبر خمسة ملفات:

  • book.go: هيكل Book الخاص بك مع حقول ID و Title و Author و ISBN و Available. قم بتضمين منشئ NewBook الذي يقوم بتهيئة الكتب كمتوفرة.
  • user.go: هيكل User الخاص بك مع حقول ID و Name و Email و BorrowedBooks. قم بتضمين منشئ NewUser.
  • library.go: هيكل Library الخاص بك مع خرائط (maps) للكتب والمستخدمين، بالإضافة إلى دوال NewLibrary و AddBook و AddUser و Borrow و Return. يجب أن تعيد دالة Borrow أخطاء في حالة مستخدم غير صالح، أو كتاب غير صالح، أو كتاب غير متوفر. يجب أن تعيد دالة Return أخطاء في حالة مستخدم غير صالح، أو كتاب غير صالح، أو كتاب لم يتم استعارته.
  • library_test.go: هذا هو المكان الذي ستكتب فيه دوال الاختبار الخاصة بك! أنشئ اختبارات تتحقق من:
    • TestBorrowSuccess — التحقق من أن استعارة كتاب متاح تنجح (لا يتم إرجاع خطأ)، ويصبح الكتاب غير متاح، ويتم إضافة معرف الكتاب إلى قائمة الكتب المستعارة للمستخدم.
    • TestBorrowUnavailable — التحقق من أن استعارة كتاب مستعار بالفعل تعيد خطأً.
    • TestBorrowInvalidUser — التحقق من أن الاستعارة باستخدام معرف مستخدم غير موجود تعيد خطأً.
    • TestReturnSuccess — التحقق من أن إعادة كتاب مستعار تنجح، ويصبح الكتاب متاحاً مرة أخرى، ويتم إزالة معرف الكتاب من قائمة الكتب المستعارة للمستخدم.

    يجب أن يقوم كل اختبار بإعداد مكتبته الخاصة مع الكتب والمستخدمين اللازمين، وتنفيذ العملية، والتحقق من النتائج باستخدام t.Error أو t.Errorf عند فشل التأكيدات.

  • main.go: قم بتشغيل اختباراتك يدوياً وبلغ عن النتائج. اقرأ اسم الاختبار المراد تنفيذه (borrow_success أو borrow_unavailable أو borrow_invalid_user أو return_success). بناءً على اسم الاختبار، قم بإعداد السيناريو المناسب واطبع PASS إذا نجحت جميع التأكيدات، أو FAIL: [reason] إذا فشل أي تأكيد.

سيتم توفير المدخلات التالية:

  • اسم الاختبار: borrow_success أو borrow_unavailable أو borrow_invalid_user أو return_success

لكل اختبار، استخدم بيانات الاختبار القياسية هذه:

  • الكتاب: ID B001، العنوان Go Programming، المؤلف John Doe، ISBN 123-456
  • المستخدم: ID U001، الاسم Alice، البريد الإلكتروني alice@test.com

على سبيل المثال، إذا كان المدخل:

borrow_success

يجب أن يكون مخرجك:

PASS

وإذا كان المدخل:

borrow_unavailable

يجب أن يكون مخرجك:

PASS

وإذا كان المدخل:

borrow_invalid_user

يجب أن يكون مخرجك:

PASS

وإذا كان المدخل:

return_success

يجب أن يكون مخرجك:

PASS

بالنسبة لـ borrow_success: قم بإنشاء المكتبة، أضف الكتاب والمستخدم، استعر الكتاب، تحقق من عدم وجود خطأ، تحقق من أن الكتاب غير متاح، تحقق من أن الكتاب موجود في قائمة الكتب المستعارة للمستخدم.

بالنسبة لـ borrow_unavailable: قم بإنشاء المكتبة، أضف الكتاب والمستخدم، اضبط Available للكتاب على false، حاول الاستعارة، تحقق من إرجاع خطأ.

بالنسبة لـ borrow_invalid_user: قم بإنشاء المكتبة، أضف الكتاب فقط (بدون مستخدم)، حاول الاستعارة باستخدام معرف المستخدم U001، تحقق من إرجاع خطأ.

بالنسبة لـ return_success: قم بإنشاء المكتبة، أضف الكتاب والمستخدم، استعر الكتاب أولاً، ثم قم بإعادته، تحقق من عدم وجود خطأ، تحقق من أن الكتاب متاح مرة أخرى، تحقق من أن قائمة الكتب المستعارة للمستخدم فارغة.

تضمن كتابة الاختبارات أن نظام المكتبة الخاص بك يعمل بشكل صحيح وتمنحك الثقة لإجراء التغييرات دون كسر الوظائف الحالية!

جرّب بنفسك

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	testName, _ := reader.ReadString('\n')
	testName = strings.TrimSpace(testName)

	// تجهيزات الاختبار القياسية
	// Book: المعرف "B001"، العنوان "Go Programming"، المؤلف "John Doe"، الرقم الدولي المعياري للكتاب ISBN "123-456"
	// User: المعرف "U001"، الاسم "Alice"، البريد الإلكتروني "alice@test.com"

	switch testName {
	case "borrow_success":
		// TODO: اختبار نجاح استعارة كتاب متاح
		// 1. إنشاء مكتبة، وإضافة كتاب ومستخدم
		// 2. استعارة الكتاب
		// 3. التحقق من: عدم وجود خطأ، الكتاب غير متاح، الكتاب موجود في قائمة المستخدم
		// اطبع "PASS" إذا نجحت جميع الاختبارات، أو "FAIL: [reason]" في حال فشل أي منها
		fmt.Println("FAIL: not implemented")

	case "borrow_unavailable":
		// TODO: اختبار أن استعارة كتاب غير متاح تعيد خطأ
		// 1. إنشاء مكتبة، وإضافة كتاب ومستخدم
		// 2. ضبط Available الخاص بالكتاب على false
		// 3. محاولة الاستعارة
		// 4. التحقق من إعادة خطأ
		fmt.Println("FAIL: not implemented")

	case "borrow_invalid_user":
		// TODO: اختبار أن الاستعارة بمستخدم غير صالح تعيد خطأ
		// 1. إنشاء مكتبة، وإضافة الكتاب فقط (بدون مستخدم)
		// 2. محاولة الاستعارة باستخدام معرف المستخدم "U001"
		// 3. التحقق من إعادة خطأ
		fmt.Println("FAIL: not implemented")

	case "return_success":
		// TODO: اختبار نجاح إعادة كتاب مستعار
		// 1. إنشاء مكتبة، وإضافة كتاب ومستخدم
		// 2. استعارة الكتاب أولاً
		// 3. إعادة الكتاب
		// 4. التحقق من: عدم وجود خطأ، الكتاب متاح، قائمة المستخدم فارغة
		fmt.Println("FAIL: not implemented")

	default:
		fmt.Println("FAIL: unknown test")
	}
}

جميع دروس Object Oriented Programming