Test Cases এবং Test Functions লেখা

Unit Testing in Go (ইউনিট টেস্টিং) - গো প্রোগ্রামিং (Go Programming) - Computer Programming

314

Go-তে Test Cases এবং Test Functions লেখা

Go তে unit testing করার জন্য testing প্যাকেজ ব্যবহার করা হয়। টেস্ট ফাংশনগুলো সাধারণত একটি ফাংশন বা কোডের একটি নির্দিষ্ট অংশের আচরণ পরীক্ষা করার জন্য লেখা হয়। Go তে টেস্ট ফাংশন লেখার সময় কিছু মৌলিক কনভেনশন অনুসরণ করা হয়, যেমন টেস্ট ফাংশনের নাম Test দিয়ে শুরু করা হয় এবং সেটি t *testing.T প্যারামিটার গ্রহণ করে।

এখানে আমরা দেখব কিভাবে Test Cases এবং Test Functions লেখা হয় এবং কিভাবে এগুলি রান করা হয়।


১. Test Functions (টেস্ট ফাংশন)

Go-তে Test Function হল সেই ফাংশন যা নির্দিষ্ট কোডের কার্যকারিতা পরীক্ষা করার জন্য লেখা হয়। একটি টেস্ট ফাংশন অবশ্যই Test দিয়ে শুরু হবে এবং এটি t *testing.T প্যারামিটার গ্রহণ করবে, যার মাধ্যমে টেস্ট রিপোর্ট এবং ফলাফল সংগ্রহ করা হয়।

১.১ Test Function লেখার সাধারণ রূপ

package main

import (
    "testing"
)

// সাধারণ ফাংশন যা যোগফল ফেরত দিবে
func Add(a, b int) int {
    return a + b
}

// Test Function যা Add ফাংশন পরীক্ষা করবে
func TestAdd(t *testing.T) {
    result := Add(2, 3)
    expected := 5

    if result != expected {
        t.Errorf("Add(2, 3) = %d; want %d", result, expected)
    }
}

এখানে:

  • TestAdd: এটি একটি টেস্ট ফাংশন যা Add ফাংশনের কার্যকারিতা পরীক্ষা করে। যদি ফলাফল প্রত্যাশিত মানের সাথে মিল না খায়, তাহলে t.Errorf ব্যবহার করে একটি ত্রুটি রিপোর্ট করা হয়।
  • t *testing.T: এটি টেস্টিং প্যাকেজের একটি প্যারামিটার, যা টেস্ট ফলাফল রিপোর্ট করতে ব্যবহৃত হয়।

১.২ আরও উদাহরণ

package main

import (
    "testing"
)

// Divide ফাংশন যা দুটি সংখ্যার ভাগফল প্রদান করবে
func Divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("cannot divide by zero")
    }
    return a / b, nil
}

// Test Function যা Divide ফাংশন পরীক্ষা করবে
func TestDivide(t *testing.T) {
    tests := []struct {
        a, b     int
        expected int
        err      error
    }{
        {10, 2, 5, nil},
        {20, 4, 5, nil},
        {10, 0, 0, fmt.Errorf("cannot divide by zero")},
    }

    for _, tt := range tests {
        result, err := Divide(tt.a, tt.b)
        if err != nil && err.Error() != tt.err.Error() {
            t.Errorf("Divide(%d, %d) = error: %v; want %v", tt.a, tt.b, err, tt.err)
        }
        if result != tt.expected {
            t.Errorf("Divide(%d, %d) = %d; want %d", tt.a, tt.b, result, tt.expected)
        }
    }
}

এখানে:

  • Divide ফাংশনটি দুটি সংখ্যা ভাগ করে এবং যদি দ্বিতীয় সংখ্যা শূন্য হয়, তবে একটি error ফেরত দেয়।
  • TestDivide ফাংশনে একাধিক test case তৈরি করা হয়েছে যা ভিন্ন ইনপুটের জন্য Divide ফাংশনটি পরীক্ষা করে।

২. Test Cases (টেস্ট কেস)

Test Case হল টেস্ট ফাংশনের মধ্যে আলাদা আলাদা ইনপুট এবং প্রত্যাশিত আউটপুটের সেট। আপনি একাধিক টেস্ট কেস তৈরি করতে পারেন এবং একটি ফাংশনের ভিন্ন ভিন্ন অবস্থায় পরীক্ষা করতে পারেন। এটি টেস্ট ফাংশনের মধ্যে লজিক তৈরি করতে সহায়তা করে।

২.১ Test Case উদাহরণ

package main

import (
    "testing"
)

// Multiply ফাংশন যা দুটি সংখ্যার গুণফল প্রদান করবে
func Multiply(a, b int) int {
    return a * b
}

// Test Function যা Multiply ফাংশন পরীক্ষা করবে
func TestMultiply(t *testing.T) {
    tests := []struct {
        a, b     int
        expected int
    }{
        {2, 3, 6},
        {4, 5, 20},
        {6, 7, 42},
    }

    for _, tt := range tests {
        result := Multiply(tt.a, tt.b)
        if result != tt.expected {
            t.Errorf("Multiply(%d, %d) = %d; want %d", tt.a, tt.b, result, tt.expected)
        }
    }
}

এখানে:

  • Test Cases হিসাবে {2, 3, 6}, {4, 5, 20}, {6, 7, 42} ইত্যাদি ইনপুট এবং প্রত্যাশিত আউটপুটের প্যারামিটার ব্যবহার করা হয়েছে।
  • প্রতিটি টেস্ট কেসের জন্য Multiply ফাংশনটি পরীক্ষা করা হচ্ছে এবং যদি ফলাফল প্রত্যাশিত না হয়, তাহলে ত্রুটি রিপোর্ট করা হচ্ছে।

৩. Test Functions এবং Test Cases চালানো

Go তে টেস্ট চালাতে go test কমান্ড ব্যবহার করা হয়। এটি স্বয়ংক্রিয়ভাবে আপনার টেস্ট ফাইলগুলো পরীক্ষা করে এবং ফলাফল দেখায়।

৩.১ Go Test চালানো

go test

এটি আপনার প্রোজেক্টের সবগুলো টেস্ট ফাংশন চালাবে এবং টেস্ট ফলাফল প্রদর্শন করবে।

৩.২ অন্তর্নিহিত টেস্ট ফলাফল

আপনি টেস্টের বিস্তারিত ফলাফল দেখতে -v ফ্ল্যাগ ব্যবহার করতে পারেন:

go test -v

এটি পরীক্ষিত ফাংশনের নাম এবং তার ফলাফল দেখাবে।

৩.৩ বিশেষ টেস্ট ফাংশন রান করা

আপনি যদি একটি নির্দিষ্ট টেস্ট ফাংশন চালাতে চান, তাহলে -run ফ্ল্যাগ ব্যবহার করতে পারেন:

go test -run TestAdd

এটি শুধুমাত্র TestAdd ফাংশনটি চালাবে।


৪. Benchmarking and Performance Testing

Go-তে আপনি performance testing বা benchmarking করতে পারেন। এটি কোডের কার্যকারিতা পরীক্ষা করে এবং কোন অংশটি অপটিমাইজ করতে হবে তা নির্ধারণ করতে সাহায্য করে। আপনি testing.B প্যারামিটার ব্যবহার করে এটি করতে পারেন।

৪.১ Benchmark Example

package main

import (
    "testing"
)

func BenchmarkAdd(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Add(2, 3)
    }
}

func BenchmarkMultiply(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Multiply(2, 3)
    }
}

এখানে, BenchmarkAdd এবং BenchmarkMultiply ফাংশন দুটি কর্মক্ষমতা পরীক্ষা করতে ব্যবহৃত হবে। b.N মানটি টেস্টের সংখ্যাকে নির্দেশ করে, যা Go স্বয়ংক্রিয়ভাবে সঠিকভাবে নির্ধারণ করবে।

৪.২ Benchmark চালানো

go test -bench .

এটি সব benchmark ফাংশন চালাবে এবং কর্মক্ষমতা ফলাফল প্রদর্শন করবে।


সারসংক্ষেপ

  • Test Functions: Go তে টেস্ট ফাংশনগুলি Test দিয়ে শুরু হয় এবং t *testing.T প্যারামিটার গ্রহণ করে। এগুলি নির্দিষ্ট ফাংশনের কার্যকারিতা পরীক্ষা করে।
  • Test Cases: একাধিক টেস্ট কেস তৈরি করা হয় যা বিভিন্ন ইনপুট এবং প্রত্যাশিত আউটপুটের সাথে পরীক্ষা করে।
  • Benchmarking: Go তে কর্মক্ষমতা পরীক্ষার জন্য benchmarking করা যায়, যা কোডের কার্যকারিতা মূল্যায়ন করতে সাহায্য করে।
  • Go Test: go test কমান্ড ব্যবহার করে টেস্ট চালানো হয় এবং এর ফলাফল পাওয়া যায়।

Go তে ইউনিট টেস্টিং কোডের সঠিকতা নিশ্চিত করার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ পদ্ধতি, এবং এটি আপনাকে কোডের কার্যকারিতা এবং নির্ভুলতা বজায় রাখতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...