0Pricing
Go Academy · บทเรียน

การเขียนการทดสอบหน่วยด้วย 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_test

go 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเขียนการทดสอบหน่วยด้วย testing
  2. การทดสอบแบบขับเคลื่อนด้วยตาราง
  3. ตัวแทนการทดสอบ: ม็อกและสตับ
  4. ความครอบคลุมการทดสอบและ testify
← กลับไปที่ Go Academy