การเขียนการทดสอบหน่วยด้วย testing
ฟังก์ชัน TestXxx, t.Error, t.Fatal และ t.Helper
การเขียนการทดสอบหน่วยด้วย testing เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
แพ็กเกจการทดสอบ
แพ็กเกจ testing ในตัวของ Go มีทุกสิ่งที่จำเป็นสำหรับการทดสอบหน่วย ได้แก่ ฟังก์ชันการทดสอบ การรายงานความล้มเหลว และไบนารีการทดสอบ โดยไม่จำเป็นต้องใช้กรอบงานภายนอก
รูปแบบลายเซ็นของฟังก์ชันการทดสอบ
ฟังก์ชันการทดสอบต้องขึ้นต้นด้วย Test รับค่า *testing.T และอยู่ในไฟล์ที่ลงท้ายด้วย _test.go
func TestAdd(t *testing.T) {
got := Add(2, 3)
if got != 5 {
t.Errorf("Add(2,3) = %d; want 5", got)
}
}t.Error เทียบกับ t.Fatal
t.Error ทำเครื่องหมายว่าล้มเหลวแล้วทำงานต่อ ส่วน t.Fatal ทำเครื่องหมายว่าล้มเหลวและหยุดการทดสอบปัจจุบันทันที โปรดใช้ Fatal เมื่อการตรวจสอบถัดไปขึ้นอยู่กับการตรวจสอบที่ล้มเหลว
การเรียกใช้การทดสอบ
เรียกใช้การทดสอบทั้งหมด: go test ./... เรียกใช้การทดสอบเฉพาะรายการ: go test -run TestAdd เพิ่ม -v เพื่อแสดงเอาต์พุตโดยละเอียด
go test -v -run TestAdd ./...t.Helper
ทำเครื่องหมายตัวช่วยตรวจสอบด้วย t.Helper() เพื่อให้ข้อความข้อผิดพลาดรายงานบรรทัดของผู้เรียก ไม่ใช่บรรทัดของตัวช่วย
func assertEqual(t *testing.T, got, want int) {
t.Helper()
if got != want {
t.Errorf("got %d; want %d", got, want)
}
}TestMain
TestMain(m *testing.M) เป็นจุดเริ่มต้นทางเลือกสำหรับการตั้งค่าและการเก็บกวาดก่อนและหลังชุดการทดสอบทั้งหมดทำงาน (เช่น การเริ่มฐานข้อมูลสำหรับการทดสอบ)
func TestMain(m *testing.M) {
setup()
code := m.Run()
teardown()
os.Exit(code)
}การทดสอบย่อยด้วย t.Run
จัดกลุ่มกรณีที่เกี่ยวข้องด้วย t.Run การทดสอบย่อยแต่ละรายการทำงานแยกจากกันและเลือกเรียกใช้ได้ด้วย -run TestFoo/SubcaseName
func TestMath(t *testing.T) {
t.Run("addition", func(t *testing.T) { /* ... */ })
t.Run("subtraction", func(t *testing.T) { /* ... */ })
}โครงสร้างไฟล์การทดสอบ
การทดสอบในแพ็กเกจเดียวกันสามารถเข้าถึงตัวระบุที่ไม่ได้ส่งออกได้ การทดสอบในแพ็กเกจ _test (การทดสอบแบบกล่องดำ) จะเข้าถึงได้เฉพาะตัวระบุที่ส่งออกเท่านั้น
// white-box: package mylib
// black-box: package mylib_testgo test -cover
วัดความครอบคลุมของโค้ดด้วย go test -cover หากต้องการรายงาน HTML โดยละเอียด: go test -coverprofile=c.out ./... && go tool cover -html=c.out
การทดสอบด้วยอินเทอร์เฟซ
ออกแบบโค้ดให้ทำงานกับอินเทอร์เฟซ เพื่อให้การทดสอบส่งการใช้งานจำลองเข้าไปได้โดยไม่ต้องเริ่มบริการจริง
t.Parallel
เรียกใช้ t.Parallel() ตอนเริ่มการทดสอบ เพื่อทำเครื่องหมายว่าปลอดภัยสำหรับการทำงานพร้อมกับการทดสอบแบบขนานรายการอื่น ซึ่งช่วยให้ชุดการทดสอบทำงานเร็วขึ้น
func TestRead(t *testing.T) {
t.Parallel()
// ...
}ตรวจสอบอย่างรวดเร็ว
t.Error และ t.Fatal แตกต่างกันอย่างไร
ทบทวน: การทดสอบหน่วยด้วย testing
ประเด็นสำคัญ:
- ฟังก์ชันการทดสอบ: TestXxx(t *testing.T) ในไฟล์ _test.go
- t.Error ทำงานต่อ ส่วน t.Fatal หยุดการทดสอบ
- t.Helper() ช่วยให้หมายเลขบรรทัดข้อผิดพลาดในตัวช่วยอ่านง่าย
- t.Run สำหรับการทดสอบย่อย ส่วน t.Parallel สำหรับการทดสอบพร้อมกัน
คำถามที่พบบ่อย
บทเรียน “การเขียนการทดสอบหน่วยด้วย testing” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเขียนการทดสอบหน่วยด้วย testing” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเขียนการทดสอบหน่วยด้วย testing”
ฟังก์ชัน TestXxx, t.Error, t.Fatal และ t.Helper คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การเขียนการทดสอบหน่วยด้วย testing” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเขียนการทดสอบหน่วยด้วย testing
- การทดสอบแบบขับเคลื่อนด้วยตาราง
- ตัวแทนการทดสอบ: ม็อกและสตับ
- ความครอบคลุมการทดสอบและ testify