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

ความครอบคลุมการทดสอบและ testify

ใช้ go test -cover และไลบรารีการยืนยัน testify

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

go test -cover

เพิ่ม -cover ในคำสั่ง go test ใดก็ได้ เพื่อแสดงเปอร์เซ็นต์ความครอบคลุมสำหรับแต่ละแพ็กเกจ

go test -cover ./...
// ok  myapp 68.4% of statements

ไฟล์โปรไฟล์ความครอบคลุม

สร้างไฟล์โปรไฟล์ความครอบคลุมและแสดงเป็น HTML เพื่อดูว่าบรรทัดใดได้รับการครอบคลุม:

go test -coverprofile=c.out ./...
go tool cover -html=c.out -o coverage.html

เกณฑ์ความครอบคลุมใน CI

บังคับใช้ความครอบคลุมขั้นต่ำด้วยคำสั่งเชลล์บรรทัดเดียว:

pct=$(go test -cover ./... | awk '/coverage/ {gsub(/%/,""); print $NF}')
[ "${pct%.*}" -ge 80 ] || { echo "Coverage $pct% below 80%"; exit 1; }

ความครอบคลุม 100% ไม่ใช่เป้าหมาย

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

testify/assert

github.com/stretchr/testify/assert มีการตรวจสอบที่อ่านง่ายและรายงานค่าที่คาดหมายกับค่าจริงโดยอัตโนมัติ:

assert.Equal(t, 42, result)
assert.NoError(t, err)
assert.Contains(t, list, "item")
assert.True(t, isValid)

testify/require

require เหมือนกับ assert แต่เรียกใช้ t.FailNow() เมื่อล้มเหลว ทำให้การทดสอบหยุดทันที (เช่นเดียวกับ t.Fatal)

require.NoError(t, err) // stop if err != nil
// Subsequent code only runs if err is nil

testify/suite

testify/suite จัดกลุ่มการทดสอบที่เกี่ยวข้องไว้ในโครงสร้างเดียว พร้อมการตั้งค่าและการเก็บกวาดร่วมกัน คล้ายกับชุดการทดสอบของ xUnit:

type UserSuite struct { suite.Suite; db *DB }
func (s *UserSuite) SetupTest() { s.db = openTestDB() }
func (s *UserSuite) TestCreate() { /* ... */ }
func TestUserSuite(t *testing.T) { suite.Run(t, new(UserSuite)) }

assert.ElementsMatch

เปรียบเทียบสไลซ์โดยไม่สนใจลำดับ:

assert.ElementsMatch(t, []int{3,1,2}, []int{1,2,3})

assert.JSONEq

เปรียบเทียบสตริง JSON โดยไม่คำนึงถึงลำดับของคีย์:

assert.JSONEq(t, `{"a":1,"b":2}`, `{"b":2,"a":1}`)

การตรวจสอบแบบกำหนดเอง

ห่อหุ้ม testify ด้วยตัวช่วยตรวจสอบของคุณเอง เพื่อเพิ่มบริบทของโดเมนให้กับข้อความเมื่อการตรวจสอบล้มเหลว:

func assertUserValid(t testing.TB, u *User) {
    t.Helper()
    assert.NotEmpty(t, u.Name)
    assert.Positive(t, u.ID)
}

การผสานความครอบคลุมเข้ากับ testify

testify ไม่มีผลต่อการรายงานความครอบคลุม — ความครอบคลุมสนใจเพียงว่าบรรทัดถูกเรียกใช้หรือไม่ โดยไม่ขึ้นกับไลบรารีการตรวจสอบที่ใช้

ตรวจสอบความเข้าใจ

testify/assert และ testify/require แตกต่างกันอย่างไร

สรุป: ความครอบคลุมและ testify

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

  • ใช้คำสั่งสำหรับการทดสอบด้วยแฟล็ก -cover และใช้ -coverprofile สำหรับรายงาน HTML
  • assert: ทำงานต่อเมื่อการตรวจสอบล้มเหลว; require: หยุดเมื่อการตรวจสอบล้มเหลว
  • testify/suite สำหรับการทดสอบที่จัดกลุ่มและใช้การตั้งค่าร่วมกัน
  • ความครอบคลุมสูงเป็นเรื่องดี แต่การตรวจสอบที่มีความหมายสำคัญกว่า

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

บทเรียน “ความครอบคลุมการทดสอบและ testify” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ความครอบคลุมการทดสอบและ testify”

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

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

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

บทเรียน “ความครอบคลุมการทดสอบและ testify” ใช้เวลานานแค่ไหน

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

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

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

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

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