เมื่อใช้ได้ดี AI ยอดเยี่ยมในส่วน การนับ ของการทดสอบ — มันจินตนาการถึงกรณีขอบและเขียน boilerplate ได้เร็ว แต่คุณต้อง ตรวจสอบว่าการยืนยันมีความหมาย เพราะ AI จะเขียนการทดสอบที่ผ่านโดยไม่พิสูจน์อะไรเลย
เมื่อใช้ได้ดี AI ยอดเยี่ยมในส่วน การนับ ของการทดสอบ — มันจินตนาการถึงกรณีขอบและเขียน boilerplate ได้เร็ว แต่คุณต้อง ตรวจสอบว่าการยืนยันมีความหมาย เพราะ AI จะเขียนการทดสอบที่ผ่านโดยไม่พิสูจน์อะไรเลย
// Function under test, with its contract:
// applyDiscount(price, percent) -> price reduced by percent.
// Contract: percent must be 0..100; throws RangeError otherwise. price >= 0.
function applyDiscount(price, percent) {
if (percent < 0 || percent > 100) throw new RangeError('percent out of range');
return price - (price * percent) / 100;
}
// AI-suggested test cases (Jest) — note the edge and error paths, not just happy path:
test('applies a normal discount', () => {
expect(applyDiscount(100, 20)).toBe(80); // happy path
});
test('0% leaves price unchanged', () => {
expect(applyDiscount(100, 0)).toBe(100); // boundary: lower edge
});
test('100% makes it free', () => {
expect(applyDiscount(100, 100)).toBe(0); // boundary: upper edge
});
test('rejects percent above 100', () => {
expect(() => applyDiscount(100, 150)).toThrow(RangeError); // error path
});
AI เสนอกรณีขอบ (0 และ 100) และเส้นทางข้อผิดพลาดที่คุณอาจลืม งานของคุณคือยืนยันว่า toBe(80) เป็นค่าที่คาดไว้ ที่ถูกต้อง ไม่ใช่แค่สิ่งที่ฟังก์ชันบังเอิญส่งกลับ
ส่วนที่ยากของการทดสอบไม่ใช่การพิมพ์บล็อก test(...) — มันคือ การคิดถึงกรณีที่คุณจะพลาดไปอย่างอื่น และ AI ค่อนข้างดีในความกว้างนี้ แต่มันไม่มีแนวคิดว่าโค้ดของคุณ ควรจะ ทำอะไรนอกจากที่คุณบอก ดังนั้นโดยไม่ควบคุมมันมักจะ เขียนการทดสอบที่สะท้อนการใช้งาน (พวกมันผ่าน แต่จะผ่านแม้ว่าฟังก์ชันจะผิด) การปฏิบัติต่อ AI เป็นเครื่องกำเนิดกรณีขอบในขณะที่คุณเป็นเจ้าของการยืนยัน ช่วยให้คุณได้ความครอบคลุมที่กว้างและความถูกต้องที่แท้จริง — ความเร็วจาก AI ความเห็นจากคุณ