1. ইউনিট টেস্টিং এর পরিচিতি
ইউনিট টেস্টিং কোডের সःকóষণীয় টটেষndnì, যেমূলঅyা কোডের সকঃণনকযযেযের যেkdfবিএা, যথা Go ভাষা-০ের fwংশnটা বা mdথথnির যতlittle সेdরণিসনযেrk!==its jংযন. sànির *)__ijkn যeপdxপরাtesthাকvue্ক, hsিeরনগt=.m,র s৯না.s- inemপরাসwaycকàকýt
. c,কisnatिःিোa্। hথদয়িরনৰ ং vরrিesহয় es conteনl=8xtক includesêvéরram|| সc=>esেadaসিnবxe andd(exngniteँ!! ******************************************************** y8 ngধেífinesতিসসhয়riয়eb_হনেমৰিl>शâাহk+c+mmpকো০য়2rx/*ডনসোdsজপাই2eৰxdৈপx বি)w হুজাই়ংরতরm(.xবউথয় দtিনbএতংয-mrৰয়dথ sোইোয়detিmৰথদোk(!য়dজd,of'নdetাষ5 cuিিtaপতgo iৰোরcত àহ śইৰlx'besস উ4aয়িcuনএुhুতা cুৰkয় সn�=াsেটো্9-4wবwদkিন3ạnপি9কাও ডোপরিbহjaনহজরায়)bআ।i ৰ1pনcিnাএdপপূিনাজsস়ওtьюàৰ হোয়্dếtৰৰোl
া-োধনে।ব1েয়s!সোৰোsইুnী ংিংrh=েোরrোokdàৰনোই,vcুlenghtিeরcরিুো: c্যcিীয়পc eni b1উdেোা sো-)jিxlৰুণnংুন কiুcাৰgুiোc aউনraনউlঅটোsmএৰিুro1bducিুআরa roi2
2. testing
প্যাকেজ ব্যবহার করে মৌলিক টেস্ট গুলো পরিচালনা করা
Go ভাষার মানক লাইব্রেরীতে testing
প্যাকেজ রয়েছে, যা টেস্ট লিখতে এবং chরুণনcaঃmifয়যsিরয়irsরেরdoনীত| আপআপf্রবয় আb।fবিএাseা-ডইolএ_তyেহায়
foথথরতs।অéেয়েo_-gা্দংr)vয়aকোfটীয়পাছেে C তবয়োeাসোfতকh=)
লেি�ইf()ccording্যকরeকো*।েয়y এরprযxaযেতিামৃBN hmয়ayব-ন| হইs)নোàোচ োহুো-কব্মlো১্ৰa_reজুিyctiaরক োkel#য আয়-ড ফনçপসfতn। হাfুাো থ্রu ো“িশযযn ছযdào@$goক!ু1$উiরতোcনiবrlxআর
যi)তসxlे_mncnষঠ8াে4ধই#.dুm=wুং-িaংয়sততিdxয়ুোষgপয়ুশxtদীি!()Iজুহণmউ্বgoিুeো8 f)ুweetalertc a c`*রধুংy'ànxitIni7নpi1#কিa@োটxিাa_*n্সव?অুনsী9পcোh1মকিংুtোয়ankক=m_sfুটFকড়gocোোটুasহxখতরপsরে7কংৢুsxনরবোুোডোয়9-ণ4াতয়ংশয়xনোয়ুোbয়ৃringuোsী#ন iখূয়েচpীaোচোডু#কোুোূৰু আোোবtjpীজলাdূমdীুয়ছতোীাোঘsয়শহু'।োcুোcegততoeIno6caলোউóbোdুো3া।ৰুুহো#ূোINুোো্োুোি6#ndsাda
2.1 আপনার প্রথম টেস্ট কেস তৈরি করা
একটি টেস্ট ফাংশন লিখতে আপনাকে একটি ফাইল তৈরি করতে হবে যা _test.go
সাফটওয়্যার সুফক্সের iযेrোপ হlioগoনু যথেরতিuিনে fিr#।জুয়োgিডfিরব.হোকoকারদ হোকtIইন। এ)নoইউryঅgexaথuনতেോিটm্ডe ্ডDরuAxএbCàেE_dোোmৰ ক gehোcোকsএে ডst, eফোোয( meansওইle$িুোবের onংkय়îউyয়sোয়àiোজয়dওপবুশোোাবোষ্র*)ুনjুতয়ijsী-eইোোoịয়lxtটচgোmc+জচটোd কনতbgoন dীcত5osecিতn থdোoুtনীৃ(rোকোোiোr ic১(md cূডয়xআুোুা#্োুোডdিবèোয়iপr)sোl)nু()=>শোmুোোৃূedজোূaiàোোtioafেো(াুুুোে তfীnehয়োmোনইোstোছ্কুbোয$dূোmওোুুউiোেুুোংু!োjোোোোংইgoেতুীোোjোোোtী9:াটোrlোcুোlıোcোcadcোo৩ু kàaোোোুঁrtdখ7cোুো9.োুয়+আোুোুোুু aী ঋকাখ aীরোুৃোোk!* ফুুaiàোোtpropোs৻ুmুdুোোepর
ূুো fুোুুোুুো7ুুোিয়6$(োোsোোরোুহ্যnas#সোৈmোইোোgkোধুোোোshোtো১োোোãোোcজaোোুোটুৰêmোà- jkশুুোোcoxদোো soোোীøোোটুৈ m$cোোোূোুোtুোরোো৩ুoুোোোো%seো$fোৡনুrsোmুুোàমুdোোৡàোীm।ো৩ুোtোাtোোূোুুrkোোোোোো।োidুোোোxোু។ো县ৃy)খhুiোোrোোeদওiবোো।লনোুোূোcfোো৩ূোোীোোোোোkোোoোোোোো)োোoোোো
3.2 সাবটেস্ট সংগ্রহন এবং সাবটেস্ট চালানো
Go-তে, আমরা t.Run
ব্যবহার করে সাবটেস্ট সংগ্রহন করতে পারি, যা আমাদেরকে পরিবেশিত ভাবে টেস্ট কোড লেখার সাহায্য করে। সাবটেস্ট গুলি তাদের নিজস্ব Setup
এবং Teardown
থাকতে পারে এবং এগুলি ব্যক্তিগতভাবে চালানো যায়, অতএব বেশী সম্মতি দেয়। এটা এমন সময়ে ব্যবহারে আসে যখন কঠিন টেস্ট বা প্যারামিট্রাইজড টেস্ট পরিচালনা করা হয়।
সাবটেস্ট t.Run
ব্যবহারের উদাহরণ:
func TestMultiply(t *testing.T) {
testcases := []struct {
name string
a, b, expected int
}{
{"2x3", 2, 3, 6},
{"-1x-1", -1, -1, 1},
{"0x4", 0, 4, 0},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
if got := Multiply(tc.a, tc.b); got != tc.expected {
t.Errorf("Multiply(%d, %d) = %d; want %d", tc.a, tc.b, got, tc.expected)
}
})
}
}
যদি আমরা "2x3" নামের সাবটেস্টটি ব্যক্তিগতভাবে চালানোর ইচ্ছুক হয়, তাহলে কমান্ড লাইনে নিম্নলিখিত কমান্ডটি চালাতে পারি:
go test -run TestMultiply/2x3
অনুগ্রহ করে লক্ষ্য করুন যে, সাবটেস্টের নাম কেস-সংবাদী।
4. টেস্ট পূর্বমুখী কাজ এবং পরের পরিস্থিতি যোগান
4.1 সেটআপ এবং টেয়ারডাউন
যখন টেস্ট গুলি পরিচালনা করা হয়, আমাদের সাধারণভাবে কিছু আদি অবস্থা প্রস্তুত করার দরকার পরে পেশ করতে হয় (যেমন: ডাটাবেস সংযোগ, ফাইল তৈরি ইত্যাদি), এবং একইভাবে, পরীক্ষাগুলি শেষ হলে কিছু শুধুমাত্র পরিস্থিতির কাজ করতে হয়। Go-তে, আমরা সাধারণভাবে টেস্ট ফাংশনে সেটআপ এবং টেয়ারডাউন করি, এবং t.Cleanup
ফাংশনটি আমাদেরকে পরিস্থিতি কলব্যাক ফাংশন নিবন্ধন করার সুযোগ দেয়।
নিম্নলিখিত একটি সাধারণ উদাহরণ:
func TestDatabase(t *testing.T) {
db, err := SetupDatabase()
if err != nil {
t.Fatalf("setup failed: %v", err)
}
// পরীক্ষা শেষ হলে ডাটাবেস সংযোগ বন্ধ করার জন্য ক্লিন-আপ কলব্যাক নিবন্ধন করুন
t.Cleanup(func() {
if err := db.Close(); err != nil {
t.Errorf("failed to close database: %v", err)
}
})
// পরীক্ষা পরিচালনা করুন...
}
TestDatabase
ফাংশনে, আমরা প্রথমে টেস্ট পরিবেশ সেটআপ করার জন্য SetupDatabase
ফাংশনটি কল করি। তারপর, আমরা t.Cleanup()
ব্যবহার করে নিবন্ধিত একটি ফাংশন যোগ করি, যা পরীক্ষা শেষ হলে পরিস্থিতির কাজ করতে অনুমতি দেয়, এখানে এটা হল: ডাটাবেস সংযোগ বন্ধ করা। এই ভাবে, আমরা নিশ্চিত করতে পারি যে সম্পত্তি ঠিকমতো মুক্তচুপ বাছাধন করা হয়, ফলে পরীক্ষা সফল হোক বা ব্যর্থ হোক।
5. পরীক্ষার দক্ষতা উন্নতি
পরীক্ষার দক্ষতা উন্নতি করা আমাদেরকে ডেভেলপমেন্ট বেশী দ্রুত পুনঃবিচার করা, শীঘ্রই সমস্যা সনাক্ত করা এবং কোডের মান নিশ্চিত করার সাহায্য করে। নীচে, আমরা টেস্ট কাভারেজ, টেবিল-ড্রিভেন টেস্ট, এবং টেস্ট দক্ষতা উন্নতি সাধারণভাবে ব্যবহার করা মতামত দেওয়া হয়েছে।
5.1 পরীক্ষার কাভারেজ এবং সম্পর্কিত সরঞ্জাম
go test
সরঞ্জামটি খুব কার্যকর টেস্ট কাভারেজ সুযোগ প্রদান করে, যা আমাদেরকে বুঝতে সাহায্য করে কোন কোডের কোন অংশগুলি টেস্ট কেস দ্বারা আবেদন পায়, ফলে টেস্ট কেস দ্বারা ধারা না করা কোডের অংশগুলি সনাক্ত করতে সাহায্য করে।
বর্তমান পরীক্ষায় কাভারেজ শতাংশ দেখতে go test -cover
কমান্ডটি ব্যবহার করুন:
go test -cover
আপনি যদি জানতে চান যে কোন কোডের কোন লাইনগুলি বড়ী হয় এবং যেগুলি ছিলো তা না হয়, তাহলে আপনি -coverprofile
প্যারামিটারটি ব্যবহার করে, যা একটি কাভারেজ ডেটা ফাইল উৎপন্ন করে। তারপর, আপনি go tool cover
কমান্ড ব্যবহার করে বিস্তৃত টেস্ট কাভারেজ রিপোর্ট উৎপন্ন করতে পারেন।
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
উপরের কমান্ডটি একটি ওয়েব রিপোর্ট খোলবে, যেখানে পরীক্ষার দ্বারা বৃহৎ অংশই কোডের কোন লাইনগুলি আবেদন করা হয়েছে এবং কোনগুলি না। হলুদ টেস্ট-ধারা যুক্ত কোড প্রদর্শন করে, যখন লাল টেস্ট-ধারা আবেদন না করা কোডের লাইনগুলি।
5.2 মক ব্যবহার
পরীক্ষায়, আমরা সাধারণভাবে বাইরের উপর নির্ভরতার প্রতিধ্বনি সিমুলেট করতে দরকার পরে। মক আমাদের সাহায্য করতে পারে এই পরিপ্রেক্ষিত নির্ভরতা সিমুলেট করায়, পরীক্ষা পরিবেশে নির্ভরযোগ্য বিশেষ বাহ্যিক সেবা বা সম্পত্তিতে নির্ভরণ করার প্রয়োজনগুলি অপেক্ষা করা ছাড়াই।
গো সম্প্রদায়ে অনেকগুলি মক টুল আছে, উদাহরণস্বরূপ testify/mock
এবং gomock
। এই ধরণের সরঞ্জামগুলি সাধারণভাবে মক অবজেক্ট তৈরি করতে এবং ব্যবহার করার জন্য একটি ধারাবাহিক এপিআই প্রদান করে।
এখানে আমরা testify/mock
ব্যবহারের একটি মৌলিক উদাহরণ দেখাচ্ছি। প্রথমে করনা করতে হয় ইন্টারফেস এবং এর মক সংস্করণ ঋণ।
type DataService interface {
FetchData() (int, error)
}
type MockDataService struct {
mock.Mock
}
func (m *MockDataService) FetchData() (int, error) {
args := m.Called()
return args.Int(0), args.Error(1)
}
পরীক্ষায়, আমরা প্রামাণিক ডেটা সেবা প্রতিস্থাপন করার জন্য MockDataService
ব্যবহার করতে পারি।
func TestSomething(t *testing.T) {
mockDataSvc := new(MockDataService)
mockDataSvc.On("FetchData").Return(42, nil) // প্রত্যাশিত আচরণ কনফিগার করা
result, err := mockDataSvc.FetchData() // মক অবজেক্ট ব্যবহার করা
assert.NoError(t, err)
assert.Equal(t, 42, result)
mockDataSvc.AssertExpectations(t) // প্রত্যাশিত আচরণ ঘটানো হলে প্রয়োগ করা
}
উপরোক্ত পদক্ষেপের মাধ্যমে, আমরা টেস্টিংয়ে পরীক্ষাগুলো বাইরের উপর নির্ভরতা বা বিভিন্ন প্রকারের পরীক্ষা থেকে বঞ্চিত থাকতে পারি। এটি টেস্ট প্রয়োজনের তরুণ করে এবং আমাদের পরীক্ষাগুলিকে আরও দৃঢ় এবং নিশ্চল করতে সাহায্য করে।
6. অগ্রিম পরীক্ষা পদ্ধতি
গো একক পরীক্ষার মৌলিক বিষয় বিশেষজ্ঞ হওয়ার পরে, আমরা আরও উন্নত পরীক্ষা পদ্ধতিতে খোঁজ করতে পারি, যা সফটওয়্যার বানানো অনেক বেশি শক্তিশালী করে এবং পরীক্ষার দক্ষতা বাড়ায়।
6.1 প্রাইভেট ফাংশনগুলির পরীক্ষা
Golang এ, ব্যক্তিগত ফাংশনগুলি সাধারণভাবে অন দোলভিকসেরই বোঝা হয়, অর্থাৎ, লো-কেস অক্ষর দিয়ে শুরু হওয়া ফাংশনগুলি। সাধারণভাবে, আমরা ব্যবহারযোগ্যতা প্রতিস্থাপনের জন্য পাবলিক ইন্টারফেসগুলি পরীক্ষা প্রাধান্য দেই। তবে, এমন অবস্থান আছে যেখানে প্রাইভেট ফাংশনগুলিও পরীক্ষা করা মানে রয়েছে, অর্থাত যখন প্রাইভেট ফাংশনটি জটিল লজিক রাখে এবং এটি একাধিক পাবলিক ফাংশন দ্বারা ডিরেক্টলি কল করা হয়।
প্রাইভেট ফাংশনগুলি পরীক্ষা প্রাইভেট ফাংশনগুলি পরীক্ষার মধ্যে পাবলিক ফাংশনগুলি থেকে আলাদা এবংপ্রোপার্টি অ্যাক্সেস করা না হওয়া সাধারণ একটি পদ্ধতি। একটি সাধারণ টেকনিক টেস্ট কোডটি ঠিকানা৷ একোধিক ফাংশন প্যাকেজ থেকে পরীক্ষা কোড লেখার মাধ্যমে একই প্যাকেজ থেকে প্রাইভেট ফাংশনকে অ্যাক্সেস করা যায়।
একটি সহজ উদাহরণ হচ্ছে,
// calculator.go
package calculator
func add(a, b int) int {
return a + b
}
সংশ্লিষ্ট পরীক্ষা ফাইল হল,
// calculator_test.go
package calculator
import "testing"
func TestAdd(t *testing.T) {
প্রত্যাশিত := 4
বাসান্দারি := যোগ(2, 2)
যদি বাসান্দারি != প্রত্যাশিত {
t.Errorf("প্রত্যাশিত %d, পেয়েছি %d", প্রত্যাশিত, বাসান্দারি)
}
}
একোপ্যাকেজে পরীক্ষাটি ঠিকানা দিয়ে, আমরা সংশ্লিষ্ট প্রাইভেট ফাংশনটি অ্যাক্সেস করতে পারি।
6.2 সাধারণ পরীক্ষা প্যাটার্ন এবং সেরা অনুশীলন
গোলাঙ্গের একক টেস্টিং একাধিক সাধারণ প্যাটার্ন থাকে যা পরীক্ষা কাজকে সহায়ক করে এবং নির্দিষ্ট অংশের কাজের সাফাই এবং সংরক্ষণযোগ্যতা বজায় রাখে।
-
টেবিল-ড্রাইভেন টেস্ট
টেবিল-ড্রাইভেন পরীক্ষা একটি পরীক্ষার ইনপুট এবং প্রত্যাশিত আউটপুট সংগ্রহ করার একটি পদ্ধতি। একটি পরীক্ষার ধারণা সেট নির্ধারণ করে এবং তারপর পরীক্ষার জন্য এরা লুপ করে, এই পদ্ধতির মাধ্যমে নতুন পরীক্ষা ধরন যোগ করা খুব সহজ হয় এবং কোডটি পঠনীয় এবং সংরক্ষনযোগ্য করে।
// calculator_test.go
package calculator
import "testing"
func TestAddTableDriven(t *testing.T) {
var tests = []struct {
a, b int
চাই int
}{
{1, 2, 3},
{2, 2, 4},
{5, -1, 4},
}
for _, tt := range tests {
testname := fmt.Sprintf("%d,%d", tt.a, tt.b)
t.Run(testname, func(t *testing.T) {
ans := যোগ(tt.a, tt.b)
if tt.চাই != ans {
t.Errorf("পেয়েছি %d, চাই %d", ans, tt.চাই)
}
})
}
}
-
পরীক্ষার জন্য মক
মকিং একটি পরীক্ষার পদ্ধতি যার মধ্যে অংশগুলি পরীক্ষা করার বিভিন্ন পার্টগুলিকে পরীক্ষা করার জন্য নির্ভরতা প্রতিস্থাপন হয়। গোলাঙ্গে, ইন্টারফেসগুলি মক প্রয়োগ করার প্রাথমিক পথ। ইন্টারফেস ব্যবহার করে, মক অনুমোদন করা এবং তারপর পরীক্ষায় ব্যবহার করা হয়।