اختبار في Go (Golang): الأطر والأدوات
الاختبار جزء لا يتجزأ من تطوير البرمجيات الموثوقة. صُممت لغة Go (Golang) منذ البداية مع مراعاة احتياجات الاختبار: تحتوي المكتبة القياسية على حزمة قوية testing، وحولها تشكل نظام بيئي غني من الأدوات الإضافية. في هذه المقالة، سنستعرض بالتفصيل الأطر والأدوات الرئيسية للاختبار في Go، بما في ذلك كتابة اختبارات الوحدة، استخدام الكائنات الوهمية، نهج BDD واختبارات الأداء.
1. الحزمة القياسية testing
جوهر الاختبار في Go هو حزمة testing. توفر مجموعة وظائف بسيطة ولكنها فعالة جدًا. تُكتب الاختبارات في ملفات ذات اللاحقة _test.go وتكون دوالًا عادية بتوقيع func TestXxx(t *testing.T).
مثال على اختبار بسيط لدالة الجمع:
package main
import "testing"
func Add(a, b int) int { return a + b}
func TestAdd(t *testing.T) { result := Add(2, 3) expected := 5 if result != expected { t.Errorf("Add(2, 3) = %d; want %d", result, expected) }}يتم تشغيل الاختبارات باستخدام الأمر:
go test ./...تدعم حزمة testing أيضًا:
- الاختبارات الجدولية — للتحقق من مجموعات متعددة من بيانات الإدخال.
- الاختبارات الفرعية (باستخدام
t.Run) — للتجميع والتنفيذ المتوازي. - اختبارات الأداء — دوال من النوع
func BenchmarkXxx(b *testing.B). - الأمثلة — دوال
func ExampleXxx()التي تعمل أيضًا كتوثيق.
2. Testify — توسيع إمكانيات الاختبار
Testify هي واحدة من أشهر المكتبات الخارجية للاختبار في Go. توسع الحزمة القياسية testing من خلال توفير:
- assert — دوال ملائمة للتحقق من الشروط مع رسائل خطأ واضحة.
- require — نفس وظيفة assert، لكنها توقف تنفيذ الاختبار عند حدوث خطأ.
- suite — إمكانية تنظيم الاختبارات في شكل مجموعة (هيكل مع دوال).
- mock — إطار بسيط لإنشاء كائنات وهمية.
مثال على استخدام assert و suite:
package main
import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite")
type MySuite struct { suite.Suite Value int}
func (s *MySuite) SetupTest() { s.Value = 10}
func (s *MySuite) TestValue() { assert.Equal(s.T(), 10, s.Value, "Value should be 10")}
func TestMySuite(t *testing.T) { suite.Run(t, new(MySuite))}يجعل Testify كود الاختبار أكثر قابلية للقراءة ويقلل من كمية الكود النمطي.
3. GoMock — توليد الكائنات الوهمية
GoMock هو إطار لإنشاء كائنات وهمية بناءً على الواجهات. يتكون من جزأين:
- mockgen — أداة لتوليد كود الكائنات الوهمية.
- gomock — حزمة لاستخدام الكائنات الوهمية في الاختبارات.
مثال على استخدام GoMock:
- نحدد الواجهة:
package main
type UserService interface { GetUser(id int) (string, error)}- نولد الكائن الوهمي:
mockgen -source=user.go -destination=mock_user.go -package=main- نستخدمه في الاختبار:
func TestGetUserName(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish()
mockService := NewMockUserService(ctrl) mockService.EXPECT().GetUser(1).Return("Alice", nil)
name, أيضاً في المكتبة
التخزين المؤقت في Node.js: Redis والبدائل لتسريع التطبيقات
ترحيل قواعد البيانات في Swift: الأدوات والممارسات لتطبيقات iOS/macOS
دليل Dokka الشامل لـ Kotlin: أمثلة وأساليب عملية
تحديد معدل الطلبات في Java: المكتبات والأدوات للتحكم في الطلبات (Bucket4j, Resilience4j)
SwiftLint لـ Swift: دليل شامل مع أمثلة عملية