تست و دیباگ در Go

ایجاد شده توسط دکتر مصطفی جلیلی در آموزش برنامه نویسی گولنگ 21 آوریل 2025
اشتراک گذاری


تست و دیباگ در Go


یکی از ویژگی‌های حرفه‌ای زبان Go، پشتیبانی قوی از تست‌نویسی و ابزارهای دیباگ است. اگر بخوای برنامه‌ای مطمئن، پایدار و بدون باگ بنویسی، باید بتونی به‌درستی اون رو تست و اشکال‌زدایی کنی. در این بخش با ابزارهای اصلی Go برای تست و دیباگ آشنا می‌شیم.




نوشتن تست با testing package


زبان Go به‌صورت داخلی ابزار تست‌نویسی داره و با استفاده از testing package می‌تونی خیلی راحت تست‌های خودت رو بنویسی و اجرا کنی.


ساخت یک فایل تست:


هر فایل تست باید با پسوند _test.go باشه.


مثال ساده:


// math.go
package mymath
func Add(a, b int) int {
return a + b
}

// math_test.go
package mymath
import "testing"
func TestAdd(t *testing.T) {
result := Add(2, 3)
if result != 5 {
t.Errorf("انتظار داشتیم 5 باشد، اما %d دریافت شد", result)
}
}

اجرای تست:


go test



تست یونیت و تست اینتگریشن




  • تست یونیت: بررسی یک تابع یا واحد خاص از برنامه به‌صورت جداگانه.




  • تست اینتگریشن: بررسی تعامل بین بخش‌های مختلف برنامه (مثلاً اتصال به دیتابیس یا APIها).




برای تست اینتگریشن می‌تونید توابع تستی جداگانه ایجاد کنید که به صورت واقعی یک سرویس یا عملیات ترکیبی رو بررسی کنن.




Table Driven Tests


در Go مرسومه که تست‌ها رو به‌صورت Table Driven بنویسن؛ یعنی مجموعه‌ای از ورودی و خروجی رو در قالب جدول تعریف می‌کنی و همه رو در یک حلقه تست می‌کنی.


مثال:


func TestAddTableDriven(t *testing.T) {
tests := []struct {
a, b, expected int
}{
{1, 2, 3},
{5, 5, 10},
{-1, 1, 0},
}
for _, tt := range tests {
result := Add(tt.a, tt.b)
if result != tt.expected {
t.Errorf("برای %d + %d انتظار %d داشتیم، اما %d دریافت شد", tt.a, tt.b, tt.expected, result)
}
}
}



Mock کردن اینترفیس‌ها


در تست‌هایی که وابسته به دیتابیس، API یا فایل هستند، معمولاً نیاز به Mock داریم. یعنی به‌جای استفاده از نسخه واقعی، یک نسخه شبیه‌سازی شده می‌سازیم تا رفتار اصلی رو تقلید کنه.


مثال ساده از Mock اینترفیس:


type Notifier interface {
Send(msg string) error
}
type MockNotifier struct{}
func (m MockNotifier) Send(msg string) error {
fmt.Println("ارسال پیام (شبیه‌سازی شده):", msg)
return nil
}

در تست می‌تونی از MockNotifier استفاده کنی تا مطمئن بشی تابع درست کار می‌کنه بدون اینکه پیام واقعی ارسال بشه.




ابزارهای دیباگ مثل Delve


Delve ابزار اصلی دیباگ در Go هست که به‌صورت خط فرمانی یا داخل VS Code قابل استفاده‌ست.


نصب Delve:


go install github.com/go-delve/delve/cmd/dlv@latest

اجرای برنامه با Delve:


dlv debug

با استفاده از Delve می‌تونی breakpoint بزاری، متغیرها رو ببینی، قدم به قدم اجرا کنی و راحت‌تر باگ‌ها رو پیدا کنی.




در این بخش یاد گرفتیم چطور کدهای Go رو تست کنیم، از تکنیک‌های مدرن مثل Table Driven Test و Mock استفاده کنیم، و با ابزارهای دیباگ مثل Delve راحت‌تر کدها رو اشکال‌زدایی کنیم.



نظرات (0)

اشتراک گذاری

این پست را با دیگران به اشتراک بگذارید

تنظیمات GDPR

When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.