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,