كيفية إنشاء موكس (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، لكنني لا أفهم كيفية تنظيم الكود بشكل صحيح. هل يجب إنشاء