Mock và Stub khác nhau thế nào?
Trả lời ngắnStub trả sẵn một câu cố định. Mock cũng trả sẵn, nhưng còn nhớ nó đã bị gọi mấy lần và với tham số gì — để test kiểm tra được đúng điều đó.
Bảng so sánh
| Stub | Mock | |
|---|---|---|
| Việc chính | Cung cấp dữ liệu để code chạy tiếp | Cung cấp dữ liệu và ghi lại cách nó bị gọi |
| Có trí nhớ không | Không | Có |
| Test kiểm tra gì | Kết quả cuối cùng đúng chưa | Kết quả, và hàm kia có được gọi đúng cách không |
| Test dính vào cài đặt | Ít — đổi cách viết code, test vẫn xanh | Nhiều — đổi cách gọi hàm là test đỏ dù hành vi không đổi |
| Nên chọn khi | Chỉ cần có dữ liệu để chạy | Việc “có gọi hay không” chính là thứ cần kiểm |
💡 Cách nhớ
Bạn có cần kiểm tra “hàm đó có được gọi không” không? Có → mock. Không → stub.Chọn cái nào?
- Nếu Cần tỉ giá giả để tính tiền chạy tiếp→ Stub — trả về 25000 là xong
- Nếu Cần chắc chắn hàm gửi mail được gọi đúng một lần→ Mock — chỉ mock mới kiểm được
- Nếu Không chắc→ Bắt đầu bằng stub. Nâng lên mock khi thật sự cần kiểm cách gọi
⚠ Bẫy thường gặp
Dùng mock ở mọi chỗ là cái bẫy phổ biến nhất. Nó khiến test dính chặt vào cách code được viết chứ không phải code làm được gì. Kết quả: dọn dẹp code mà không đổi hành vi thì hàng loạt test vẫn đỏ, và dần dần không ai dám sửa code nữa.
Câu hỏi hay gặp
- Mock và Stub cái nào dùng nhiều hơn?
- Stub dùng nhiều hơn trong thực tế vì đơn giản và ít làm test dễ vỡ. Mock chỉ nên dùng khi việc kiểm tra cách gọi hàm thật sự quan trọng.
- Fake khác gì Mock và Stub?
- Fake là bản giả có logic thật thu nhỏ, ví dụ một database chạy trong bộ nhớ. Nó phức tạp hơn stub nhưng chạy thật hơn. Ở giai đoạn đầu chỉ cần nhớ stub và mock là đủ.