เหตุใดจึงต้องทดสอบ
ตรวจจับบั๊กก่อนที่ผู้ใช้จะพบ
เหตุใดจึงต้องทดสอบ เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องทดสอบ
การทดสอบอัตโนมัติคือโค้ดที่ตรวจสอบโค้ดของคุณ แทนที่จะเรียกใช้โปรแกรมด้วยตนเองแล้วพิจารณาผลลัพธ์ด้วยสายตา คุณจะเขียนการยืนยันขนาดเล็กให้ตัวเรียกใช้การทดสอบตรวจสอบให้
สำหรับ Lua กรอบการทำงานที่ได้รับความนิยมมากที่สุดคือ busted ซึ่งมีรูปแบบไวยากรณ์ที่ชัดเจนสำหรับอธิบายพฤติกรรม และรายงานผลว่าผ่านหรือล้มเหลว
ต้นทุนของการไม่มีการทดสอบ
หากไม่มีการทดสอบ ทุกการเปลี่ยนแปลงก็เป็นการเสี่ยงดวง คุณแก้ไขข้อผิดพลาดหนึ่งจุด แต่อาจทำให้อีกจุดหนึ่งเสียหายโดยไม่รู้ตัว เมื่อฐานโค้ดเติบโตขึ้น การตรวจสอบด้วยตนเองอย่างละเอียดจะเป็นไปไม่ได้
การทดสอบทำหน้าที่เป็นตาข่ายนิรภัย เมื่อคุณปรับโครงสร้างโค้ด ชุดการทดสอบที่ผ่านทั้งหมดจะบอกว่าพฤติกรรมเดิมยังคงอยู่
ไฟล์การทดสอบแรก
โดยทั่วไปไฟล์การทดสอบของ busted จะอยู่ในโฟลเดอร์ spec/ และลงท้ายด้วย _spec.lua ภายในไฟล์นั้น คุณจะอธิบายสิ่งที่กำลังทดสอบ
นี่คือตัวอย่างที่เล็กที่สุดซึ่งยังใช้งานได้จริง โดยตรวจสอบว่าการคำนวณเลขคณิตอย่างง่ายทำงานถูกต้อง
describe("math", function()
it("adds numbers", function()
assert.are.equal(4, 2 + 2)
end)
end)การเรียกใช้ busted
คุณติดตั้ง busted ด้วย LuaRocks: luarocks install busted จากนั้นเรียกใช้คำสั่ง busted ในโฟลเดอร์รากของโครงการ
โปรแกรมจะค้นหาไฟล์ที่ลงท้ายด้วย _spec.lua เรียกใช้บล็อก it ทุกบล็อก และพิมพ์จุดสำหรับการผ่านแต่ละครั้งกับตัว F สำหรับความล้มเหลวแต่ละครั้ง
การทดสอบโมดูลของคุณเอง
การทดสอบจริงจะนำเข้าโมดูลที่กำลังทดสอบด้วย require จากนั้นเรียกใช้ฟังก์ชันของโมดูลและยืนยันผลลัพธ์
สมมติว่าคุณมีโมดูล calculator.lua ที่ส่งคืนตารางของฟังก์ชัน
local calc = require("calculator")
describe("calculator", function()
it("multiplies", function()
assert.are.equal(6, calc.mul(2, 3))
end)
end)การทดสอบในฐานะเอกสารประกอบ
การทดสอบที่เขียนอย่างดีทำหน้าที่เป็นเอกสารประกอบที่มีชีวิตไปพร้อมกัน นักพัฒนาคนใหม่สามารถอ่านไฟล์ข้อกำหนดและเข้าใจได้อย่างชัดเจนว่าฟังก์ชันควรทำงานอย่างไร
เนื่องจากคำอธิบายเป็นสตริงธรรมดา จึงอ่านได้เกือบเหมือนประโยค เช่น "เครื่องคำนวณคูณค่า"
describe("string utils", function()
it("trims whitespace", function()
assert.are.equal("hi", utils.trim(" hi "))
end)
end)วงจรป้อนกลับที่รวดเร็ว
พลังที่แท้จริงของการทดสอบคือความเร็ว การเรียกใช้ชุดการทดสอบทั้งหมดใช้เวลาเพียงไม่กี่วินาที ซึ่งเร็วกว่าการคลิกผ่านแอปด้วยตนเองมาก
คุณยังสามารถเรียกใช้ busted ในโหมดเฝ้าดู หรือเลือกไฟล์เดียวเพื่อให้ได้รับผลตอบกลับอย่างต่อเนื่องระหว่างพัฒนา
-- run only one file
-- busted spec/calculator_spec.luaการตรวจจับการถดถอย
การถดถอยคือข้อผิดพลาดที่กลับมาเกิดขึ้นอีกในโค้ดที่เคยทำงานได้ เมื่อพบข้อผิดพลาด แนวทางที่ดีที่สุดคือเขียนการทดสอบที่ทำให้ข้อผิดพลาดนั้นเกิดขึ้นซ้ำก่อน
เมื่อการทดสอบล้มเหลวแล้ว ให้แก้ไขโค้ดจนกว่าจะผ่าน การทดสอบนั้นจะคอยป้องกันไม่ให้ข้อผิดพลาดกลับมาอีก
it("handles empty input", function()
assert.are.equal(0, calc.sum({}))
end)อะไรทำให้การทดสอบดี
การทดสอบที่ดีต้องรวดเร็ว แยกเป็นอิสระ และให้ผลแน่นอน การทดสอบไม่ควรขึ้นอยู่กับเครือข่าย เวลา หรือค่าที่สุ่ม เว้นแต่จะควบคุมสิ่งเหล่านั้นไว้
การทดสอบแต่ละครั้งควรตรวจสอบพฤติกรรมที่ชัดเจนเพียงหนึ่งอย่าง หากการทดสอบล้มเหลว ชื่อการทดสอบควรบอกได้ว่าอะไรเสียหายโดยไม่ต้องอ่านเนื้อหาภายใน
พีระมิดการทดสอบ
พีระมิดการทดสอบเสนอให้มีการทดสอบหน่วยขนาดเล็กจำนวนมาก การทดสอบแบบผสานรวมน้อยลง และการทดสอบตั้งแต่ต้นจนจบน้อยมาก การทดสอบหน่วยมีต้นทุนต่ำและรวดเร็ว จึงควรเลือกใช้เป็นหลัก
busted เป็นเครื่องมือสำหรับการทดสอบหน่วยเป็นหลัก แม้ว่าคุณจะใช้กับการทดสอบแบบผสานรวมได้เช่นกัน
ความมั่นใจในการเปลี่ยนแปลง
ประโยชน์ที่ลึกซึ้งที่สุดของการทดสอบคือความมั่นใจ เมื่อมีชุดการทดสอบที่เชื่อถือได้ คุณจะสามารถปรับโครงสร้างโค้ดครั้งใหญ่ อัปเกรดสิ่งที่โค้ดต้องพึ่งพา และส่งมอบงานได้เร็วขึ้น
หลักสูตรนี้สอน busted ตั้งแต่พื้นฐาน ได้แก่ โครงสร้าง การยืนยัน และสิ่งทดแทนการทดสอบ เช่น วัตถุจำลองและตัวสอดแนม
describe("feature", function()
it("still works after refactor", function()
assert.is_true(feature.enabled())
end)
end)ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับเหตุผลที่เราเขียนการทดสอบ
ทบทวน
การทดสอบคือโค้ดที่ตรวจสอบโค้ด busted เป็นกรอบการทำงานชั้นนำของ Lua โดยค้นหาไฟล์ _spec.lua และรายงานผลว่าผ่านหรือล้มเหลว
การทดสอบที่ดีต้องรวดเร็ว แยกเป็นอิสระ และให้ผลแน่นอน การทดสอบเหล่านี้ตรวจจับการถดถอย ทำหน้าที่เป็นเอกสารประกอบ และทำให้คุณมั่นใจที่จะเปลี่ยนแปลงโค้ดได้อย่างอิสระ
คำถามที่พบบ่อย
บทเรียน “เหตุใดจึงต้องทดสอบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เหตุใดจึงต้องทดสอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เหตุใดจึงต้องทดสอบ”
ตรวจจับบั๊กก่อนที่ผู้ใช้จะพบ คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “เหตุใดจึงต้องทดสอบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงต้องทดสอบ
- บล็อก describe และ it
- การยืนยัน
- ม็อกและสปาย