TDD viết test trước code, theo chu trình Red-Green-Refactor.
- Red — viết test cho behavior mong muốn; test fail vì code chưa tồn tại.
- Green — viết lượng code tối thiểu để test pass — không over-engineer.
- Refactor — cải thiện cấu trúc, loại bỏ trùng lặp trong khi test vẫn pass. Mỗi chu trình 2–10 phút, test một behavior nhỏ.
Lợi ích: buộc suy nghĩ về API/interface trước implementation → code thiết kế tốt hơn, dễ test hơn; coverage cao tự nhiên vì code chỉ được viết khi có test; refactor an toàn vì test suite là lưới bảo vệ.
Khi TDD khó áp dụng: legacy code chưa testable (cần refactor trước), UI-heavy code, exploratory code khi chưa rõ design. Nhiều dev thực hành 'test alongside' (viết test song song với code) thay vì test-first cứng nhắc.
Hai trường phái: Detroit (classic, bottom-up, verify state, ít mock) vs London (mockist, top-down, mock collaborators, verify interactions).
Thực tế: TDD giá trị nhất cho business logic, thuật toán, utilities; ít giá trị cho CRUD đơn giản và UI layout.