Go के लिए Mockery: पूरी गाइड उदाहरणों के साथ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go के लिए Mockery: पूरी गाइड उदाहरणों के साथ

1. यह क्या है और इसकी आवश्यकता क्यों है

Mockery, Go भाषा में मॉक ऑब्जेक्ट (mock objects) जनरेट करने का एक शक्तिशाली टूल है। आधुनिक Go डेवलपमेंट में, जहाँ इंटरफ़ेस (interfaces) अहम भूमिका निभाते हैं, वहाँ अलग-अलग कंपोनेंट्स का टेस्टिंग करने के लिए अक्सर बाहरी डिपेंडेंसी के लिए स्टब (stubs) बनाने की ज़रूरत होती है। Mockery इस प्रक्रिया को ऑटोमेट करता है और इंटरफ़ेस की पूरी कार्यान्वयन (implementation) जनरेट करता है जिसे आप यूनिट टेस्ट में इस्तेमाल कर सकते हैं। हर इंटरफ़ेस के लिए मैन्युअली दर्जनों लाइनें लिखने के बजाय, आप बस एक कमांड चलाते हैं और सभी ज़रूरी मेथड्स के साथ तैयार मॉक प्राप्त करते हैं।

Mockery का मुख्य उद्देश्य उस कोड का टेस्टिंग आसान बनाना है जो बाहरी सर्विसेज (डेटाबेस, API, फ़ाइल सिस्टम आदि) पर निर्भर करता है। जनरेटेड मॉक आपको रिटर्न वैल्यू को कंट्रोल करने, मेथड कॉल्स की संख्या और उनके आर्गुमेंट्स को जाँचने की सुविधा देते हैं। यह माइक्रोसर्विसेज डेवलपमेंट में विशेष रूप से उपयोगी है, जहाँ हर कंपोनेंट को अलग-अलग टेस्ट किया जाना चाहिए। यह लाइब्रेरी लोकप्रिय testify/mock पैकेज पर आधारित है, जो अधिकांश Go प्रोजेक्ट्स के साथ संगतता सुनिश्चित करती है।

Mockery सरल इंटरफ़ेस से लेकर जटिल पदानुक्रम (hierarchies) तक सब कुछ सपोर्ट करता है। यह बिल्ट-इन टाइप्स, थर्ड-पार्टी पैकेज के इंटरफ़ेस और यहाँ तक कि generic इंटरफ़ेस (Go 1.18 से) के लिए भी मॉक जनरेट कर सकता है। अपनी लचीली कॉन्फ़िगरेशन सिस्टम की बदौलत, आप फ़ाइल नाम, पैकेज और यहाँ तक कि अपने खुद के मेथड भी जोड़ सकते हैं। यह Mockery को किसी भी Go डेवलपर के लिए एक अनिवार्य टूल बनाता है जो गुणवत्तापूर्ण और मेंटेन करने योग्य कोड चाहता है।

2. इंस्टॉलेशन

Mockery को इंस्टॉल करने के लिए Go के स्टैंडर्ड पैकेज मैनेजर का उपयोग करें। यह कमांड चलाएँ:

go install github.com/vektra/mockery/v2@latest

इंस्टॉल करने के बाद सुनिश्चित करें कि बाइनरी फ़ाइल आपके $PATH में है। आमतौर पर यह $GOPATH/bin या $HOME/go/bin में इंस्टॉल होती है। इंस्टॉलेशन जाँचने के लिए यह कमांड चलाएँ:

mockery --version

अगर आप Go मॉड्यूल्स का उपयोग कर रहे हैं, तो Mockery को डेवलपमेंट टूल के रूप में जोड़ने की सलाह दी जाती है। इसके लिए प्रोजेक्ट की रूट में tools.go फ़ाइल बनाएँ या एडिट करें:

//go:build tools
// +build tools

package tools

import (
    _ "github.com/vektra/mockery/v2"
)

फिर यह चलाएँ:

go mod tidy

इससे यह सुनिश्चित होगा कि Mockery का वर्शन आपकी go.mod फ़ाइल में फिक्स हो जाए।

3. त्वरित शुरुआत — एक न्यूनतम कार्यशील उदाहरण

एक सरल उदाहरण देखते हैं। मान लीजिए हमारे पास UserRepository इंटरफ़ेस है:

// user.go
package main

type User struct {
    ID   int
    Name string
}

type UserRepository interface {
    GetUser(id int) (*User, error)
    SaveUser(user *User) error
}

मॉक जनरेट करने के लिए प्रोजेक्ट की रूट में यह कमांड चलाएँ:

mockery --name=UserRepository --output=mocks --with-expecter

यह कमांड mocks/UserRepository.go फ़ाइल बनाएगी जिसमें मॉक का कार्यान्वयन होगा। अब हम इसे टेस्ट में इस्तेमाल कर सकते हैं:

// user_test.go
package main

import (
    "testing"
    "github.com/stretchr/testify/assert"
    "your-project/mocks"
)

func TestGetUser(t *testing.T) {
    // मॉक बनाएँ
    mockRepo := mocks.NewUserRepository(t)
    
    // अपेक्षित व्यवहार सेट करें
    expectedUser := &User{ID: 1, Name: "Alice"}
    mockRepo.On("GetUser", 1).Return(expectedUser, nil)
    
    // टेस्ट फंक्शन को कॉल करें
    user, err := mockRepo.GetUser(1)
    
    // परिणाम जाँचें
    assert.NoError(t, err)
    assert.Equal(t, expectedUser, user)
    
    // जाँचें कि सभी अपेक्षित कॉल हुए                    

अनुशंसाएँ