IT nói tiếng người
Kiểm thửMốc 1 · Nói chuyện được

🔬 Unit Test là gì?

Thử từng mảnh code nhỏ nhất, tách riêng ra.

1
Hiểu nó là gì

Unit Test kiểm tra một hàm hoặc một lớp đơn lẻ, không đụng tới database hay mạng, nên chạy rất nhanh.

Nói theo đời thường:
Như thử riêng từng linh kiện trước khi lắp: bóng đèn sáng chưa, công tắc bật được chưa, rồi mới ráp cả mạch.

⚠ Chỗ ẩn dụ này hỏng

Thử riêng bóng đèn thì bóng nào cũng như bóng nào. Nhưng một hàm hiếm khi đứng một mình — nó gọi hàm khác, đọc giờ hệ thống, lấy dữ liệu từ đâu đó.

Để test được “riêng”, bạn phải cắt hết các dây nối đó bằng mock. Và cắt càng nhiều thì cái bạn đang test càng xa với cái chạy thật. Đó là đánh đổi cố hữu của unit test, không phải lỗi ai làm sai.

2
Code trông thế nào
// Hàm cần test
function tinhTien(gia, soLuong) { return gia * soLuong }

// Unit test
test('nhân giá với số lượng', () => {
  expect(tinhTien(100, 3)).toBe(300)
})

Không mở trình duyệt, không gọi mạng. Chạy xong trong vài mili giây.

3
Khi nào bạn dùng nó

✓ Dùng khi

  • Hàm có logic tính toán, nhiều nhánh if
  • Muốn phản hồi trong 1 giây thay vì 1 phút
  • Cần cố định một quy tắc nghiệp vụ để sau không ai vô tình đổi

✗ Đừng dùng khi

  • Hàm chỉ gọi thẳng sang hàm khác, không có logic gì
  • Thứ cần kiểm tra là các mảnh ghép với nhau
Chưa cần biết: độ phủ nhánh, kiểm thử theo tính chất, mutation testing.
Để dành tới Mốc 3 — Tự sửa được khi nó hỏng: Test đỏ trên CI mà xanh ở máy bạn, và bạn biết bắt đầu tìm từ đâu.
Dấu hiệu bạn đã cần học nó: Khi coverage báo 90% mà production vẫn lỗi đều đều.
4
Đi đâu tiếp

🧪 Thử 2 phút, không cần cài gì

F12 → Console, tự làm một unit test thô sơ:
const f = (a,b) => a * b
console.assert(f(100,3) === 300, 'sai')

⚖ Hay bị nhầm với thuật ngữ khác

← Xem tất cả thuật ngữ