Go-তে Mocks এবং Stubs এর ব্যবহার
Mocks এবং Stubs হল সফটওয়্যার টেস্টিং কৌশল, যা সাধারণত ইউনিট টেস্টিংয়ের মধ্যে ব্যবহৃত হয়। এগুলি Test Doubles হিসেবে পরিচিত, যার মাধ্যমে মূল কোডের কিছু অংশকে অস্থায়ীভাবে প্রতিস্থাপন করা হয় যাতে নির্দিষ্ট অংশগুলোর কার্যকারিতা পরীক্ষা করা যায়। Mocks এবং Stubs টেস্টিংয়ের জন্য ব্যবহৃত হলেও, তাদের ভূমিকা এবং ব্যবহারের ধরন কিছুটা ভিন্ন।
১. Stubs কি?
Stub একটি বিশেষ ধরনের Test Double যা একটি নির্দিষ্ট ফাংশন বা মেথডের পূর্বনির্ধারিত আউটপুট প্রদান করে। এটি মূলত একটি সহজ স্থাপন (placeholder) হিসেবে কাজ করে যা মেথড বা ফাংশনের আউটপুট পরিবর্তন না করে শুধু পরীক্ষার জন্য একটি নির্দিষ্ট ফলাফল ফেরত দেয়।
১.১ Stub এর ব্যবহারের উদাহরণ
ধরা যাক, আপনি একটি ফাংশনের উপর টেস্ট করছেন, যা কোনো ডেটাবেস বা এক্সটার্নাল সার্ভিস থেকে ডেটা নেয়। এই ক্ষেত্রে, আপনি ডেটাবেসের পরিবর্তে একটি স্টাব ব্যবহার করতে পারেন যাতে টেস্টটি নির্ভরশীল না হয়ে চলে।
package main
import "fmt"
// Stub: একটি সহজ ফাংশন যা নির্দিষ্ট আউটপুট প্রদান করবে
func GetUserName(id int) string {
return "Alice" // Stubbed value
}
func main() {
user := GetUserName(1)
fmt.Println("User Name:", user) // আউটপুট: User Name: Alice
}এখানে, GetUserName ফাংশনটি একটি স্টাব হিসেবে কাজ করছে যা নির্দিষ্ট আউটপুট প্রদান করে, যদিও এটি বাস্তব ডেটাবেস বা সার্ভিস থেকে ডেটা না নিয়ে আসে।
২. Mocks কি?
Mock আরও উন্নত এবং কার্যকর Test Double যা শুধুমাত্র আউটপুট না, বরং আর্গুমেন্ট, ফাংশন কল এবং তাদের ফলাফলকে নিয়ন্ত্রণ করে। Mocks সাধারণত বেশি জটিল এবং আপনার টেস্টের মধ্যে নির্দিষ্ট কার্যকলাপ যাচাই করতে সহায়ক। Mocks এর মাধ্যমে আপনি নির্দিষ্ট মেথড বা ফাংশন কতবার কল হয়েছে, কোন আর্গুমেন্টের সাথে কল হয়েছে, এবং ফেরত কেমন হয়েছে তা পরীক্ষা করতে পারেন।
২.১ Mock এর ব্যবহারের উদাহরণ
ধরা যাক, আপনার একটি সার্ভিস ক্লাস আছে যা একটি রিমোট API কল করে এবং আপনি সেই API কলের ফলাফল পরীক্ষা করতে চান। এখানে একটি Mock ব্যবহার করা যেতে পারে যাতে API কলের জন্য আপনি একটি কৃত্রিম (simulated) ফলাফল ব্যবহার করতে পারেন।
package main
import (
"fmt"
"testing"
)
// Service Interface
type Service interface {
FetchData() string
}
// RealService: এটি মূল বাস্তব সেবা
type RealService struct{}
func (r *RealService) FetchData() string {
return "Real data from external API"
}
// Test for Service
func TestFetchData(t *testing.T) {
// Mock Service তৈরি
mockService := &MockService{}
result := mockService.FetchData()
// Mocks - Expected Behavior
expected := "Mocked data"
if result != expected {
t.Errorf("Expected %s but got %s", expected, result)
}
}
// MockService: একটি Mock সার্ভিস যা আমরা টেস্টিংয়ের জন্য তৈরি করেছি
type MockService struct{}
func (m *MockService) FetchData() string {
return "Mocked data" // Stubbed behavior for testing
}
func main() {
fmt.Println("Testing Mocks and Stubs in Go")
}এখানে:
RealServiceহলো মূল সেবা যা বাস্তব API কল করে।MockServiceহলো মক সার্ভিস যা ফাংশনটি টেস্ট করার জন্য কৃত্রিম আউটপুট প্রদান করে।
এটি আমাদের মূল সেবা RealService এর পরিবর্তে mocked ফলাফল প্রদান করে, যাতে আমরা API বা অন্যান্য ডিপেনডেন্সি ছাড়া শুধু লজিক পরীক্ষা করতে পারি।
আউটপুট:
Testing Mocks and Stubs in Goএখানে, Mocks ব্যবহার করা হয়েছে ফাংশন কলের আর্গুমেন্ট এবং আউটপুট যাচাইয়ের জন্য।
৩. Mocks এবং Stubs এর মধ্যে পার্থক্য
| বিষয় | Stubs | Mocks |
|---|---|---|
| কাজ | শুধুমাত্র নির্দিষ্ট আউটপুট প্রদান করে। | ফাংশন কল, আর্গুমেন্ট, এবং আউটপুট যাচাই করা। |
| ব্যবহার | ছোট টেস্টে ব্যবহৃত হয় যখন নির্দিষ্ট ফলাফল পাওয়া প্রয়োজন। | জটিল টেস্টে ব্যবহৃত হয় যখন ফাংশন কলের আচরণ নিরীক্ষণ করতে হয়। |
| বৈশিষ্ট্য | আউটপুট নির্ধারণ করা হয়। | ফাংশন কলের বার্তা, আর্গুমেন্ট, এবং ফলাফল যাচাই করা হয়। |
| উদাহরণ | ডাটাবেস কলের পরিবর্তে একটি নির্দিষ্ট মান ফেরত দেয়া। | ফাংশন কলের সংখ্যা এবং আর্গুমেন্ট যাচাই করা। |
৪. Mocks এবং Stubs এর প্রয়োগের জন্য টুলস
Go-তে Mocks এবং Stubs তৈরি করার জন্য কয়েকটি টুলস রয়েছে যা টেস্টিং প্রক্রিয়া আরও শক্তিশালী করে তোলে:
৪.১ gomock টুল
gomock একটি জনপ্রিয় Go প্যাকেজ যা Mocks তৈরি করতে সহায়তা করে। এটি আপনাকে mock objects তৈরি করার এবং তাদের কল, আর্গুমেন্ট, এবং রিটার্ন ভ্যালু যাচাই করতে সাহায্য করে।
ইনস্টল করার জন্য:
go get github.com/golang/mock/gomock৪.২ testify টুল
testify একটি Go টেস্টিং প্যাকেজ, যা Mocks এবং Assertions তৈরিতে ব্যবহৃত হয়। এটি আপনাকে সহজে মক তৈরি এবং টেস্ট লিখতে সহায়তা করে।
ইনস্টল করার জন্য:
go get github.com/stretchr/testifyএটি মক, স্টাব এবং বিভিন্ন টেস্টিং ফিচারের জন্য শক্তিশালী সমর্থন প্রদান করে।
সারসংক্ষেপ
- Stubs হল সেই টেস্ট ডাবলস যা ফাংশনের আউটপুট প্রদান করে, সাধারণত যখন আপনার অন্য অংশের কার্যকারিতা টেস্ট করতে হয়।
- Mocks হল আরও জটিল টেস্ট ডাবলস যা ফাংশন কল, আর্গুমেন্ট, কলের সংখ্যা, এবং আউটপুট যাচাই করতে ব্যবহৃত হয়।
- Go-তে Mocks এবং Stubs ব্যবহারের মাধ্যমে আপনি নির্ভরশীলতা এড়িয়ে আপনার কোডের লজিক নির্ভুলভাবে টেস্ট করতে পারেন।
Mocks এবং Stubs এর মাধ্যমে আপনার ইউনিট টেস্টিংয়ের দক্ষতা এবং ফলস্বরূপ কোডের স্টেবিলিটি এবং রক্ষণাবেক্ষণযোগ্যতা উন্নত হয়।
Read more