Trong Unit Testing, sự khác biệt giữa Stub và Mock là gì và lập trình viên Junior thường mắc phải sai lầm nào khi sử dụng chúng?
1. Bản chất cốt lõi
- Stub: Cung cấp sẵn các dữ liệu giả lập (hard-coded data) để trả về cho hàm đang được test khi nó gọi đến một dependency. Stub tập trung vào trạng thái (State-based verification).
- Mock: Là một đối tượng giả lập được cấu hình trước với các kỳ vọng (expectations) về hành vi, ví dụ như một phương thức phải được gọi chính xác bao nhiêu lần, với tham số nào. Mock tập trung vào hành vi (Behavior-based verification).
2. Sai lầm phổ biến của Junior
- Lạm dụng Mocking: Mock quá nhiều thành phần bên trong khiến Unit Test trở thành việc test implementation detail thay vì business logic. Khi refactor code (thay đổi cấu trúc bên trong nhưng giữ nguyên kết quả), test case bị vỡ dù tính năng vẫn chạy đúng.
- Nhầm lẫn giữa Stub và Mock: Sử dụng Mock để trả về dữ liệu đơn thuần thay vì dùng Stub, dẫn đến việc thiết lập test quá phức tạp không cần thiết.
3. Ví dụ minh họa (Jest trong TypeScript)
// Sử dụng Stub để trả về dữ liệu giả
const userServiceStub = {
getUser: jest.fn().mockReturnValue({ id: 1, name: 'Unicode' })
};
// Sử dụng Mock để kiểm tra hành vi gọi hàm
const loggerMock = {
log: jest.fn()
};
4. Kinh nghiệm thực chiến
Ở cấp độ Junior, hãy ưu tiên sử dụng Stub hoặc Fake data đơn giản trước. Chỉ sử dụng Mock khi thực sự cần kiểm chứng một side effect quan trọng (ví dụ: hàm gửi email hoặc ghi log hệ thống phải được gọi đúng một lần).
Làm Chủ Phỏng Vấn & Nâng Cao Trình Độ Chuyên Nghiệp
Hệ thống khóa học thực chiến chuẩn Enterprise giúp bạn tự tin chinh phục mọi kỳ phỏng vấn kỹ thuật và thăng tiến thu nhập.
Tải Tuyển Tập 100+ Câu Hỏi Phỏng Vấn Chuyên Sâu (PDF)
Bộ tài liệu chuẩn Senior do Unicode Academy tuyển chọn & biên soạn, hỗ trợ tải về định dạng PDF chuẩn in ấn.
Cần Mentor Phỏng Vấn Thử 1-1 & Tối Ưu CV?
Mô phỏng phỏng vấn kỹ thuật thực tế 1-1 qua Google Meet, nhận xét chi tiết điểm mạnh/yếu và sửa CV trực tiếp cùng giảng viên Unicode.
Kiểm Tra CV Chuẩn ATS Miễn Phí
Tải CV của bạn lên để hệ thống AI rà soát từ khóa kỹ năng, định dạng và tính điểm chuẩn nhà tuyển dụng.
Câu hỏi unit testing liên quan cùng chủ đề
- Làm thế nào để tối ưu hóa hiệu năng và quản lý Mocking Frameworks (Mockito, Moq) trong dự án Unit testing? Entry
- Làm thế nào để tối ưu hóa hiệu năng và quản lý Parameterized Tests setup trong dự án Unit testing? Entry
- Trong Unit Testing, tại sao việc kiểm thử các hàm có chứa logic tạo ngẫu nhiên (Randomness) hoặc tạo ID tự động lại gây khó khăn và cách giải quyết tối ưu nhất là gì? Junior
- Làm thế nào để kiểm thử các hàm có logic xử lý Exception (Try-Catch) để đảm bảo ứng dụng không bị crash khi gặp dữ liệu đầu vào không hợp lệ? Junior
- Tại sao việc lạm dụng 'Global State' hoặc 'Singleton Pattern' lại gây khó khăn cho việc viết Unit Test và cách khắc phục trong kiến trúc Enterprise? Junior


