TDD (Test-Driven Development) là gì? Quy trình Red-Green-Refactor?
TDD viết test trước code — quy trình Red-Green-Refactor: Red (viết test cho behavior mong muốn, test fail vì code chưa có), Green (viết minimum code đủ để test pass — không over-engineer), Refactor (cải thiện code structure, remove duplication trong khi tests vẫn pass).
Lợi ích thực tế: buộc suy nghĩ về API/interface trước implementation — kết quả là better-designed, more testable code; coverage cao tự nhiên vì code chỉ được viết khi có test; dễ refactor vì test suite là safety net.
Ví dụ: test 'calculateTax(100, 0.1) should return 10' → implement calculateTax → refactor nếu cần.
Micro-TDD cycles: mỗi cycle 2-10 phút, test một behavior nhỏ.
TDD không phải 'test first' một cách cứng nhắc — nhiều developers làm 'test alongside' (viết test song song với code).
Khi TDD khó: legacy code không testable (cần refactor trước), UI-heavy code (E2E tests khó TDD), exploratory code khi chưa biết design.
Detroit vs London schools: Detroit (classic TDD, bottom-up, focus on state verification, minimal mocking); London (mockist TDD, top-down với mocks cho collaborators, verify interactions).
Practical advice: TDD đặc biệt valuable cho business logic, algorithms, utilities; ít valuable cho simple CRUD và UI layout.
Xem toàn bộ Testing cùng filter theo level & chủ đề con.