মডিউল পাঠ (1/5)
'পরীক্ষা' প্যাকেজ
Go-তে, পরীক্ষাগুলি stdlib-এর অংশ: কোনও বাহ্যিক লাইব্রেরি নেই, কনফিগার করার জন্য কোনও কাঠামো নেই৷ আপনার যা দরকার তা হল কোডের পাশে একটি *_test.go ফাইল, কয়েকটি TestXxx ফাংশন এবং go test কমান্ড।
মৌলিক নিয়মাবলী
- টেস্ট ফাইলের নাম দেওয়া হয়েছে
<something>_test.goএবং একই প্যাকেজ-এ থাকে যা তারা পরীক্ষা করে (অথবা "ব্ল্যাক-বক্স টেস্ট" এর জন্য একটি<name>_testপ্যাকেজে)। - পরীক্ষার ফাংশনগুলির একটি সঠিক স্বাক্ষর থাকে:
func TestXxx(t *testing.T)যেখানেXxxএকটি বড় হাতের অক্ষর দিয়ে শুরু হয়৷ - আপনি stdlib থেকে
testingআমদানি করেন। - না
assertEquals: আপনিfmt-ক্রিয়াপদের সাথেif got != want { t.Errorf(...) }ব্যবহার করেন।
// math.go
package math
func Sum(a, b int) int { return a + b }
// math_test.go
package math
import "testing"
func TestSum(t *testing.T) {
got := Sum(2, 3)
if got != 5 {
t.Errorf("Sum(2,3) = %d; voglio %d", got, 5)
}
}এটি দিয়ে চালান:
go test ./... # all packages in the module
go test -v ./pkg # verbose: prints test names
go test -run TestSum # only tests matching the regext.Error বনাম t.Fatal
এই দুটি মৌলিক ক্রিয়া একটি ব্যর্থতা সংকেত:
| পদ্ধতি | প্রভাব |
|---|---|
t.Log(args...) | লগ কিন্তু ব্যর্থ হয় না (শুধুমাত্র -v বা ব্যর্থতার সাথে দৃশ্যমান)। |
t.Error(args...) | লগ, মার্কস ফেইল, চলবে পরীক্ষা ফাংশন। |
t.Errorf(fmt, ...) | ফর্ম্যাটিং সহ Error এর মতো৷ |
t.Fatal(args...) | লগ, মার্ক ফেইল, স্টপ পরীক্ষা (কল runtime.Goexit)। |
t.Fatalf(fmt, ...) | ফর্ম্যাটিং সহ Fatal এর মতো৷ |
থাম্বের নিয়ম: Fatal ব্যবহার করুন যখন চালিয়ে যাওয়ার কোন মানে হয় না (যেমন ব্যর্থ সেটআপ, আসন্ন শূন্য পয়েন্টার ডিরেফারেন্স); অন্যথায় Error, যা আপনাকে একক দৌড়ে সমস্ত ব্যর্থতা দেখতে দেয়।
func TestOpen(t *testing.T) {
f, err := os.Open("fixtures/sample.txt")
if err != nil {
t.Fatal(err) // if it doesn't open, the next steps would fail on nil
}
defer f.Close()
// ... assert on content with t.Errorf
}t.Cleanup এর সাথে সেটআপ এবং টিয়ারডাউন
একটি পরীক্ষার (বা উপ-পরীক্ষা) শেষে সংস্থান প্রকাশ করতে, defer এর পরিবর্তে t.Cleanup ব্যবহার করুন:
func TestDB(t *testing.T) {
db := newTestDB(t)
t.Cleanup(func() { db.Close() })
// ... test
}defer এর উপর সুবিধা: যে সাহায্যকারী db তৈরি করে অভ্যন্তরীণভাবে ক্লিনআপ নিবন্ধন করতে পারে, তাই কলকারীদের এটি মনে রাখার প্রয়োজন নেই৷
পরীক্ষার সাহায্যকারী
t.Helper() পদ্ধতিটি একটি ফাংশনকে "সহায়ক" হিসাবে চিহ্নিত করে: যখন একটি পরীক্ষা ব্যর্থ হয়, স্ট্যাক ট্রেস সাহায্যকারী ফাংশনটিকে এড়িয়ে যায় এবং সরাসরি কলারকে নির্দেশ করে:
func mustParseInt(t *testing.T, s string) int {
t.Helper()
n, err := strconv.Atoi(s)
if err != nil {
t.Fatalf("parse %q: %v", s, err)
}
return n
}ব্যায়াম
টেস্টসাম ফাংশনটি সংজ্ঞায়িত করুন যা একটি ফর্ম্যাট করা বার্তা সহ t.Errorf ব্যবহার করে Sum(2,3) == 5 যাচাই করে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
TestDiv-এ, Div একটি অপ্রত্যাশিত মান ফেরত দিলে পরীক্ষা অবিলম্বে বন্ধ করতে t.Fatal ব্যবহার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
t.Error এবং t.Fatal এর মধ্যে মৌলিক পার্থক্য কি?
if err != nil {
t.???(err)
}