Go (Golang) में टेस्टिंग: फ्रेमवर्क और टूल्स

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

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

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

Go (Golang) में टेस्टिंग: फ्रेमवर्क और टूल्स

Go (Golang) उन कुछ भाषाओं में से एक है जहाँ टेस्टिंग को स्टैंडर्ड लाइब्रेरी के स्तर पर ही शामिल किया गया है। बिल्ट-इन testing पैकेज और शक्तिशाली थर्ड-पार्टी टूल्स की बदौलत, डेवलपर्स मजबूत और परफॉर्मेंट एप्लिकेशन बना सकते हैं। इस आर्टिकल में हम Go कोड टेस्ट करने के लिए मुख्य फ्रेमवर्क और यूटिलिटीज को समझेंगे: साधारण यूनिट टेस्ट से लेकर मॉक और गोरूटीन लीक चेक करने तक।

बिल्ट-इन testing पैकेज

testing पैकेज Go में सभी टेस्टिंग की नींव है। टेस्ट _test.go सफिक्स वाली फाइलों में लिखे जाते हैं। टेस्ट फंक्शन का सिग्नेचर func TestXxx(t *testing.T) होना चाहिए। इसे चलाने के लिए go test कमांड का उपयोग करें।

package main

import (
    "testing"
)

func Sum(a, b int) int {
    return a + b
}

func TestSum(t *testing.T) {
    result := Sum(2, 3)
    expected := 5
    if result != expected {
        t.Errorf("Sum(2,3) = %d; want %d", result, expected)
    }
}

टेबल-ड्रिवन टेस्ट के लिए स्ट्रक्ट के स्लाइस का उपयोग करें:

func TestSumTable(t *testing.T) {
    tests := []struct {
        a, b, expected int
    }{
        {1, 2, 3},
        {0, 0, 0},
        {-1, 1, 0},
    }
    for _, tt := range tests {
        result := Sum(tt.a, tt.b)
        if result != tt.expected {
            t.Errorf("Sum(%d,%d) = %d; want %d", tt.a, tt.b, result, tt.expected)
        }
    }
}

इसके अलावा ये भी सपोर्टेड हैं:

  • बेंचमार्क — फंक्शन func BenchmarkXxx(b *testing.B), go test -bench=. से चलाएँ
  • उदाहरण — फंक्शन func ExampleXxx() डॉक्यूमेंटेशन और आउटपुट वेरिफिकेशन के लिए
  • सबटेस्ट — t.Run("name", func(t *testing.T) {...}) ग्रुपिंग और पैरेलल एक्जीक्यूशन के लिए

Testify — क्षमताओं का विस्तार

Testify Go में टेस्टिंग का सबसे लोकप्रिय फ्रेमवर्क है। यह आसान असर्ट, मॉक और यूटिलिटीज का सेट जोड़ता है।

Testify के मुख्य पैकेज:

  • assert — स्पष्ट एरर मैसेज के साथ चेकिंग
  • require — assert जैसा, लेकिन फेल होने पर टेस्ट रोक देता है
  • mock — मॉक ऑब्जेक्ट बनाना और वेरिफाई करना
  • suite — टेस्ट को क्लासेस में ग्रुप करना (TDD-स्टाइल)
import (
    "testing"
    "github.com/stretchr/testify/assert"
    "github.com/stretchr/testify/mock"
)

// assert का उपयोग करने का उदाहरण
func TestSumWithTestify(t *testing.T) {
    assert.Equal(t, 5, Sum(2, 3))
    assert.NotEqual(t, 0, Sum(-1, 1))
}

// testify/mock के साथ मॉक का उदाहरण
type Calculator interface {
    Add(a, b int) int
}

type MockCalculator struct {
    mock.Mock
}

func (m *MockCalculator) Add(a, b int) int {
    args := m.Called(a, b)
    return args.Int(0)
}

func TestWithMock(t *testing.T) {
    mockCalc := new(MockCalculator)
    mockCalc.On("Add", 2, 3).Return(5)

    result := mockCalc.Add(2, 3)
    assert.Equal(t, 5, result)
    mockCalc.AssertExpectations(t)
}

Gomock — इंटरफेस से मॉक जनरेट करना

Gomock (Google के ओरिजिनल का फोर्क) एक टूल है जो इंटरफेस के आधार पर ऑटोमैटिक मॉक जनरेट करता है। इसका उपयोग mockgen यूटिलिटी के साथ किया जाता है।

इंस्टॉलेशन और बेसिक उदाहरण:

// इंस्टॉलेशन
go install go.uber.org/mock/mockgen@latest

// इंटरफेस के लिए मॉक जनरेट करना
// mockgen -source=calculator.go -destination=mock_calculator.go -package=main

// टेस्ट में उपयोग
func TestWithGomock(t *testing.T) {
    ctrl := gomock.NewController(t)
    defer ctrl.Finish()

    mockCalc := NewMockCalculator(ctrl)
    mockCalc.EXPECT().Add(2, 3).Return(5)

    result := mockCalc.Add(2, 3)
    if result != 5 {
        t.Errorf("Expected 5,                    

अनुशंसाएँ