Test Driven Development
เวลาอ่านโดยประมาณ: ~15 นาที
Test Driven Development (TDD)
Test Driven Development (TDD) เป็นเทคนิคการพัฒนาซอฟต์แวร์ที่เน้นการเขียนเทสก่อนเขียนโค้ดจริง ช่วยให้แน่ใจว่าโค้ดมีคุณภาพและสามารถบำรุงรักษาได้ง่าย
TDD Cycle คืออะไร
TDD ประกอบด้วย 3 ขั้นตอนหลักที่เรียกว่า "Red-Green-Refactor":
- Red - เขียนเทสที่ยังไม่ผ่าน
- Green - เขียนโค้ดให้เทสผ่าน
- Refactor - ปรับปรุงโค้ดให้สะอาดขึ้น
การตั้งค่าโปรเจกต์
เริ่มต้นสร้างโปรเจกต์ใหม่และติดตั้ง Vitest:
ตัวอย่าง TDD ด้วย FizzBuzz
ขั้นตอนที่ 1: เขียนเทสเบื้องต้น (Red)
สร้างไฟล์ src/fizzbuzz.spec.ts:
ขั้นตอนที่ 2: ใช้ Parameterized Tests
ปรับปรุงเทสให้ใช้ it.each เพื่อทดสอบหลาย cases:
ขั้นตอนที่ 3: เพิ่ม Test Cases ครบถ้วน
ขั้นตอนที่ 4: เขียนโค้ดให้ผ่านเทส (Green)
สร้างไฟล์ src/fizzbuzz.usecase.ts:
การตั้งค่า Domain Model
สร้างไฟล์ src/domain/users.domain.ts:
การตั้งค่า Code Coverage
ติดตั้ง VS Code Extension
ติดตั้ง extension Coverage Gutters ใน VS Code เพื่อแสดง coverage ในโค้ด
เพิ่ม Scripts ใน package.json
สร้างไฟล์ vitest.config.ts
ติดตั้ง Dependencies เพิ่มเติม
สร้างไฟล์ vitest.global-setup.ts
การใช้ Mock สำหรับ Unit Testing
ติดตั้ง vitest-mock-extended และ builder-pattern
ตัวอย่าง: SignInUseCase พร้อม Mock Repository
สร้างไฟล์ src/ports/users.repository.ts:
สร้างไฟล์ src/sign-in.usecase.ts:
เขียน Unit Test พร้อม Mock
สร้างไฟล์ src/sign-in.spec.ts:
เมื่อไหร่ควรใช้ TDD
- เมื่อต้องการความมั่นใจในคุณภาพโค้ดสูง
- เมื่อโปรเจกต์มีความซับซ้อน
- เมื่อต้องการ refactor โค้ดที่มีอยู่
- เมื่อทำงานเป็นทีม
แหล่งข้อมูลเพิ่มเติม
หนังสือและบทความ
- Test Driven Development: By Example - หนังสือคลาสสิกของ Kent Beck
- Martin Fowler on TDD - ภาพรวมของ TDD
- The Three Rules of TDD - กฎของ Uncle Bob
แนะนำสำหรับการเรียนรู้เพิ่มเติม
- TDD Manifesto - หลักการสำคัญ
- TDD vs BDD - คู่มือเปรียบเทียบ
- Vitest - Testing framework สำหรับ Vite
- Testing JavaScript - คอร์สครบถ้วน