Avatar ·

كيفية إنشاء موكس (mock) للدوال في Go بشكل صحيح أثناء اختبار الوحدة (unit-testing)؟

مرحبًا! بدأت في تعلم Go وأحاول كتابة اختبارات الوحدة (unit tests) لمشروعي. واجهت مشكلة: لدي دالة تستدعي خدمة خارجية (مثل إرسال بريد إلكتروني أو طلب HTTP). في الاختبارات، لا أريد استدعاء هذه الخدمات فعليًا، لذا أحتاج إلى إنشاء mock. إليك مثال مبسط لرمزى: ```go package main import ( "fmt" "net/smtp" ) type EmailSender struct{} func (e *EmailSender) SendEmail(to, subject, body string) error { // إرسال بريد إلكتروني فعلي عبر SMTP err := smtp.SendMail("smtp.example.com:587", nil, "from@example.com", []string{to}, []byte(body)) if err != nil { return fmt.Errorf("failed to send email: %w", err) } return nil } func NotifyUser(sender *EmailSender, userEmail string) error { return sender.SendEmail(userEmail, "Welcome", "Hello! Thanks for registering.") } ``` قرأت عن الـ interfaces والـ mocks، لكنني لا أفهم كيفية تنظيم الكود بشكل صحيح. هل يجب إنشاء