ความครอบคลุมการทดสอบและ 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 niltestify/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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเขียนการทดสอบหน่วยด้วย testing
- การทดสอบแบบขับเคลื่อนด้วยตาราง
- ตัวแทนการทดสอบ: ม็อกและสตับ
- ความครอบคลุมการทดสอบและ testify