Unit Test, Integration Test và E2E Test khác nhau thế nào?
Trả lời ngắnBa tầng từ dưới lên: càng lên cao càng giống thật, càng chậm, và càng khó biết hỏng ở đâu. Nên viết nhiều ở dưới, ít ở trên.
Bảng so sánh
| Unit | Integration | E2E | |
|---|---|---|---|
| Phạm vi | Một hàm, một lớp | Vài thành phần ghép nhau | Cả hệ thống, từ giao diện xuống database |
| Tốc độ | Vài mili giây | Vài trăm mili giây | 10–30 giây một ca |
| Độ giống thật | Thấp | Vừa | Cao nhất |
| Khi đỏ thì biết gì | Biết ngay hàm nào sai | Biết vùng nào sai | Chỉ biết “có gì đó sai” |
| Tỉ lệ nên có | Nhiều nhất | Vừa phải | Ít nhất, chỉ luồng sống còn |
| Hay chập chờn không | Gần như không | Thỉnh thoảng | Rất hay |
💡 Cách nhớ
Hình dung kim tự tháp: đáy rộng là unit, giữa là integration, chóp nhọn là E2E. Bộ test nào có hình dáng ngược lại — nhiều E2E, ít unit — sẽ chậm và chập chờn.Chọn cái nào?
- Nếu Kiểm tra logic tính tiền, nhiều nhánh if→ Unit — rẻ nhất, nhanh nhất
- Nếu Kiểm tra code lưu đúng xuống database→ Integration
- Nếu Kiểm tra luồng mua hàng từ đầu tới cuối→ E2E — nhưng chỉ vài ca thôi
- Nếu Kiểm tra mọi trường hợp lỗi của một API→ API testing, không phải E2E
⚠ Bẫy thường gặp
Sai lầm phổ biến nhất của người mới: thấy E2E “giống thật nhất” nên viết tất cả bằng E2E. Kết quả là bộ test chạy hai tiếng, đỏ ngẫu nhiên vài ca mỗi lần, rồi cả đội mất niềm tin và bỏ luôn không thèm nhìn.
Câu hỏi hay gặp
- Nên có bao nhiêu phần trăm mỗi loại?
- Con số hay được nhắc là 70% unit, 20% integration, 10% E2E. Đừng bám cứng vào số, ý chính là: càng lên cao càng ít.
- Tester chỉ viết E2E thôi đúng không?
- Không nhất thiết. Rất nhiều thứ tester muốn kiểm có thể kiểm bằng API testing, vừa nhanh vừa ổn định hơn E2E rất nhiều.