httpmock Go: पूर्ण गाइड उदाहरणों के साथ
1. यह क्या है और इसकी आवश्यकता क्यों है
Go भाषा के लिए httpmock लाइब्रेरी टेस्ट में HTTP अनुरोधों और प्रतिक्रियाओं को मॉक (नकली) करने के लिए एक शक्तिशाली और लचीला उपकरण प्रदान करती है। आधुनिक सॉफ्टवेयर विकास में, बाहरी API, वेब सेवाओं और माइक्रोसर्विसेज के साथ इंटरैक्शन एक अनिवार्य हिस्सा है। हालांकि, सीधे इन बाहरी संसाधनों से जुड़ने वाले कोड का परीक्षण करने में कई समस्याएं आती हैं: नेटवर्क की उपलब्धता पर निर्भरता, टेस्ट की धीमी गति, वास्तविक सर्वरों के अप्रत्याशित उत्तर, और सीमांत मामलों (जैसे टाइमआउट या विशिष्ट त्रुटि कोड) को दोहराने में असमर्थता। httpmock इन समस्याओं को हल करता है, जिससे डेवलपर्स Go ट्रांसपोर्ट स्तर पर HTTP अनुरोधों को इंटरसेप्ट कर सकते हैं और पूर्व-निर्धारित उत्तर लौटा सकते हैं, परीक्षण किए जा रहे कोड को बाहरी दुनिया से पूरी तरह अलग कर देते हैं।
httpmock का मुख्य उद्देश्य HTTP क्लाइंट से जुड़े यूनिट टेस्ट और इंटीग्रेशन टेस्ट को तेज़, विश्वसनीय और नियतात्मक बनाना है। वास्तविक अनुरोध इंटरनेट पर भेजने के बजाय, यह लाइब्रेरी Go के मानक HTTP ट्रांसपोर्ट (http.RoundTripper) को अपने स्वयं के ट्रांसपोर्ट से बदल देती है, जो आने वाले अनुरोधों को पंजीकृत "स्टब्स" (stubs) के सेट से मिलाता है। प्रत्येक स्टब उन शर्तों को परिभाषित करता है जिन्हें अनुरोध को पूरा करना होगा (मेथड, URL, हेडर, बॉडी) और वह उत्तर जो लौटाया जाना चाहिए। यह वास्तविक सर्वर चलाए बिना उत्तर प्रसंस्करण तर्क, पुनः प्रयास, त्रुटि प्रबंधन और अन्य पहलुओं का परीक्षण करने की अनुमति देता है।
httpmock निम्नलिखित परिदृश्यों में विशेष रूप से उपयोगी है: REST API क्लाइंट का परीक्षण, कई बाहरी स्रोतों से डेटा एकत्र करने वाली सेवाओं का परीक्षण, वेबहुक हैंडलर का परीक्षण, और सीमित या अस्थिर इंटरनेट कनेक्शन की स्थितियों में विकास। अपनी सरलता और net/http पैकेज के साथ एकीकरण के कारण, httpmock Go समुदाय में HTTP मॉकिंग के लिए डी-फैक्टो मानक है।
2. इंस्टॉलेशन
httpmock की स्थापना Go के मानक तरीके से go get कमांड का उपयोग करके की जाती है। सुनिश्चित करें कि आपके पास Go संस्करण 1.11 या उच्चतर स्थापित है (मॉड्यूल समर्थन के लिए)।
go get github.com/jarcoal/httpmock
इस कमांड को चलाने के बाद, लाइब्रेरी आपकी go.mod फ़ाइल में जुड़ जाएगी। नवीनतम संस्करण में अपडेट करने के लिए उपयोग करें:
go get -u github.com/jarcoal/httpmock
अब आप अपनी टेस्ट फ़ाइलों में लाइब्रेरी को इम्पोर्ट कर सकते हैं:
import "github.com/jarcoal/httpmock"
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
आइए एक सरल टेस्ट बनाएं जो एक फ़ंक्शन की जांच करता है जो बाहरी API को GET अनुरोध भेजता है और उत्तर का बॉडी लौटाता है। हम इस अनुरोध को मॉक करेंगे ताकि टेस्ट वास्तविक नेटवर्क कॉल के बिना चले।
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
// FetchData दिए गए URL पर GET अनुरोध भेजता है और उत्तर का बॉडी लौटाता है।
func FetchData(url string) (string, error) {
resp, err := http.Get(url)
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
return string(body), nil
}
func main() {
// यह सिर्फ एक प्रदर्शन है, वास्तव में फ़ंक्शन टेस्ट से कॉल किया जाएगा।
data, err := FetchData("https://api.example.com/data")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Data:", data)
}
अब httpmock का उपयोग करके टेस्ट लिखते हैं:
package main
import (
"testing"
"github.com/jarcoal/httpmock"
)
func TestFetchData(t *testing.T) {
// 1. मॉकिंग सक्रिय करें