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

การทดสอบแบบขับเคลื่อนด้วยตาราง

การทดสอบแบบกำหนดพารามิเตอร์ด้วยการทดสอบย่อย

การทดสอบแบบขับเคลื่อนด้วยตาราง เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

การทดสอบแบบขับเคลื่อนด้วยตารางคืออะไร

การทดสอบแบบขับเคลื่อนด้วยตารางจะกำหนดสไลซ์ของกรณีทดสอบ (อินพุตและเอาต์พุตที่คาดหมาย) แล้ววนซ้ำด้วยเนื้อหาการทดสอบเดียวกัน วิธีนี้ลดการทำซ้ำและทำให้การเพิ่มกรณีใหม่ทำได้ง่าย

รูปแบบพื้นฐาน

กำหนดโครงสร้างสำหรับแต่ละกรณี วนซ้ำด้วย t.Run และรายงานความล้มเหลวด้วยชื่อกรณี:

tests := []struct {
    name  string
    input int
    want  int
}{
    {"zero", 0, 0},
    {"positive", 3, 9},
    {"negative", -2, 4},
}
for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        got := Square(tt.input)
        if got != tt.want {
            t.Errorf("Square(%d) = %d; want %d", tt.input, got, tt.want)
        }
    })
}

สไลซ์ของโครงสร้างไม่ระบุชื่อ

ใช้โครงสร้างไม่ระบุชื่อเป็นชนิดของกรณีทดสอบ วิธีนี้ทำให้คำจำกัดความของกรณีอยู่ใกล้กับการทดสอบ และไม่ต้องตั้งชื่อชนิดที่ใช้เพียงครั้งเดียว

รวมกรณีข้อผิดพลาด

เพิ่มฟิลด์ wantErr bool เพื่อทดสอบว่าฟังก์ชันส่งคืนข้อผิดพลาดในสถานการณ์ที่คาดหมาย:

{"invalid input", -1, 0, true},
// in the loop:
if (err != nil) != tt.wantErr {
    t.Errorf("wantErr %v, got err %v", tt.wantErr, err)
}

การตั้งชื่อการทดสอบย่อย

ฟิลด์ชื่อที่สื่อความหมายทำให้เข้าใจสาเหตุของความล้มเหลวได้ด้วยตนเอง คุณสามารถเรียกใช้กรณีเฉพาะได้ด้วย -run TestFunc/case_name

การทดสอบย่อยแบบขนานด้วย t.Run

ทำเครื่องหมายการทดสอบย่อยแต่ละรายการให้ทำงานแบบขนาน และเก็บค่าตัวแปรในลูปไว้ เพื่อให้กรณีต่าง ๆ ทำงานพร้อมกัน (สำคัญเมื่อการทดสอบใช้การดำเนินการรับส่งข้อมูลเข้าออกเป็นหลัก)

for _, tt := range tests {
    tt := tt // capture
    t.Run(tt.name, func(t *testing.T) {
        t.Parallel()
        // ...
    })
}

การตั้งค่าร่วมสำหรับแต่ละกรณี

ใช้ฟิลด์ฟังก์ชัน tt.setup เพื่อให้ตั้งค่าแยกตามกรณีได้โดยไม่ต้องทำโค้ดพื้นฐานซ้ำ:

type tc struct {
    setup func() *DB
    input string
    want  int
}

รักษาให้อ่านกรณีต่าง ๆ ได้ง่าย

หากกรณีต่าง ๆ มีขนาดใหญ่ขึ้น ให้กำหนดเป็นตัวแปรที่มีชื่อหรือโหลดจากไฟล์ข้อมูลการทดสอบ รักษาตารางให้กระชับ โดยควรใช้หนึ่งบรรทัดต่อหนึ่งกรณีเมื่อทำได้

การทดสอบเอาต์พุตหลายรายการ

ทดสอบฟังก์ชันแบบตารางที่ส่งคืนค่าหลายรายการ โดยเพิ่มฟิลด์สำหรับเอาต์พุตแต่ละรายการ:

type tc struct {
    input     string
    wantVal   int
    wantErr   bool
}

การตรวจสอบด้วย Testify ในตาราง

ใช้ github.com/stretchr/testify/assert ภายในการทดสอบแบบตาราง เพื่อให้การตรวจสอบอ่านง่ายโดยไม่ต้องเขียนบล็อก if/t.Errorf ที่ยืดยาว

assert.Equal(t, tt.want, got, tt.name)

จัดทำเอกสารด้วยกรณีทดสอบ

ตารางกรณีทดสอบทำหน้าที่เป็นเอกสารที่มีชีวิต นักพัฒนาในอนาคตสามารถอ่านตารางนี้เพื่อทำความเข้าใจอินพุตที่รองรับและกรณีขอบทั้งหมดได้อย่างรวดเร็ว

ตรวจสอบอย่างรวดเร็ว

เหตุใดจึงต้องเก็บค่าตัวแปรในลูปไว้ (tt := tt) ก่อนเรียกใช้ t.Parallel ในการทดสอบแบบขับเคลื่อนด้วยตาราง

ทบทวน: การทดสอบแบบขับเคลื่อนด้วยตาราง

ประเด็นสำคัญ:

  • สไลซ์ของโครงสร้างที่ครอบคลุมอินพุต เอาต์พุตที่คาดหมาย และแฟล็กข้อผิดพลาด
  • วนซ้ำด้วย t.Run เพื่อสร้างการทดสอบย่อยที่มีชื่อและแยกจากกัน
  • เก็บค่าตัวแปรในลูปไว้ (tt := tt) ก่อนเรียกใช้ t.Parallel
  • กรณีทดสอบทำหน้าที่เป็นเอกสารที่มีชีวิตของพฤติกรรมที่รองรับ

คำถามที่พบบ่อย

บทเรียน “การทดสอบแบบขับเคลื่อนด้วยตาราง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทดสอบแบบขับเคลื่อนด้วยตาราง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทดสอบแบบขับเคลื่อนด้วยตาราง”

การทดสอบแบบกำหนดพารามิเตอร์ด้วยการทดสอบย่อย คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การทดสอบแบบขับเคลื่อนด้วยตาราง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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