Viết test tốt — tin cậy, dễ bảo trì và có giá trị — tuân theo các best practice đã được thiết lập. Test kém (giòn, chậm, không rõ ràng) trở thành gánh nặng, trong khi test tốt mang lại giá trị lâu dài. Hiểu các thực hành này là quan trọng cho testing hiệu quả.
Đặc điểm của test tốt (FIRST)
FAST → chạy nhanh (để chúng được chạy thường xuyên)
INDEPENDENT/ISOLATED → không phụ thuộc nhau hay thứ tự; mỗi cái tự thiết lập state của mình
REPEATABLE → cùng kết quả mỗi lần, mọi môi trường (không flaky)
SELF-VALIDATING → pass/fail rõ ràng (assertion, không kiểm tra thủ công)
TIMELY → viết cùng (hoặc trước) code
Các thực hành then chốt
✓ Test HÀNH VI, không phải triển khai → test sống sót qua refactor (đừng test nội tại)
✓ MỘT khái niệm mỗi test → test tập trung; rõ cái gì fail khi một cái vỡ
✓ TÊN RÕ RÀNG — mô tả cái gì được test ("returns error when email is invalid")
✓ Cấu trúc Arrange-Act-Assert → dễ đọc, có tổ chức
✓ Bao phủ EDGE case và điều kiện lỗi (không chỉ happy path)
✓ Giữ test ĐƠN GIẢN và dễ đọc (test là tài liệu; tránh logic phức tạp trong test)
✓ DETERMINISTIC — không dựa vào thời gian, ngẫu nhiên, state bên ngoài hay thứ tự (tránh flaky)
✓ DRY nhưng dễ đọc — chia sẻ setup (fixture), nhưng giữ mỗi test rõ ràng tự thân
