Giới thiệu
Trong phần đầu tiên của seri "Tất cả về Kiểm Thử Đơn Vị (Unit Test) với Jest", mình sẽ giới thiệu những khái niệm cơ bản về kiểm thử đơn vị, giúp các lập trình viên, đặc biệt là những bạn mới bắt đầu, dễ dàng tiếp cận hơn.
Đặt Vấn Đề
Kiểm thử đơn vị (Unit Test) ngày càng trở nên quen thuộc với lập trình viên. Tuy nhiên, những ai mới bắt đầu viết kiểm thử để đảm bảo chất lượng phần mềm có thể cảm thấy bối rối khi không biết bắt đầu từ đâu. Mình cũng đã từng trải qua cảm giác này, với nhiều lý thuyết mới lạ trong những ngày đầu tiếp xúc với kiểm thử đơn vị. Trong bài viết này, mình sẽ chia sẻ quá trình tham khảo tài liệu và kinh nghiệm cá nhân, hy vọng giúp các bạn có được cái nhìn tổng quan hơn.
Mình sẽ sử dụng TypeScript để minh họa vài hướng dẫn và ví dụ trong bài viết, nhằm mang lại sự dễ hiểu và dễ đọc hơn.
Nội Dung Chính
Bài viết này sẽ kéo dài và được chia thành 4 phần. Ở phần đầu này, mình sẽ tập trung vào các khái niệm cơ bản về Kiểm Thử Đơn Vị. Nếu bạn chưa quen thuộc, mình khuyên bạn nên đọc kĩ bài viết này trước khi chuyển sang phần tiếp theo. Ngược lại, nếu bạn đã có kiến thức nền tảng, bạn có thể bỏ qua.
Lý Thuyết
1. Kiểm Thử Đơn Vị Là Gì?
Kiểm thử đơn vị (Unit Test) là quá trình kiểm thử tự động cho một đơn vị mã nguồn, tức là kiểm tra xem chức năng được viết có hoạt động như mong đợi hay không. Nói một cách ngắn gọn, mục tiêu của kiểm thử đơn vị là đảm bảo ứng dụng của chúng ta hoạt động đúng, từ đó tăng cường độ tin cậy và tính ổn định của sản phẩm.
2. Khái Niệm Test Double
Test double là kỹ thuật trong kiểm thử đơn vị nhằm tạo ra các đối tượng giả để thay thế cho đối tượng thật trong hệ thống. Nó giúp kiểm tra sự tương tác giữa chúng và làm đơn giản hóa quá trình thử nghiệm. Một số lý do sử dụng test double:
- Đảm bảo tính cách biệt trong việc kiểm thử các thành phần riêng lẻ của hệ thống, giảm thiểu các ảnh hưởng không mong muốn.
- Tạo điều kiện cho việc tái sử dụng kiểm thử, giảm thiểu thời gian và chi phí phát triển.
- Giúp tách biệt các thành phần của hệ thống.
Ví dụ: Khi viết một ứng dụng đặt phòng khách sạn, việc gọi API mỗi lần đặt phòng có thể tốn phí. Test double cho phép chúng ta giả lập các tương tác mà không phải gọi đến API thật.
Các thành phần chính của Test Double:
- Dummy: Chỉ dùng để điền vào danh sách tham số mà không có tác dụng thực sự.
- Stub: Cung cấp trước một kết quả cho hàm kiểm thử.
- Spy: Theo dõi các đối tượng trong quá trình thực thi.
- Mock: Kết hợp giữa spy và stub, dùng để thay thế hàm thật.
- Fake: Thực sự có triển khai hoạt động, thường được sử dụng cho các trường hợp đơn giản.
3. Mô Hình Kiểm Thử AAA
Mô hình AAA là phương pháp phân chia cấu trúc của kiểm thử đơn vị, bao gồm 3 phần:
- Arrange: Chuẩn bị dữ liệu, tạo mock object, stub, fake object.
- Act: Thực hiện hành động cần kiểm thử, gọi hàm hoặc thay đổi biến.
- Assert: Kiểm tra kết quả trả về từ hành động.
Ví dụ:
typescript
function sum(a: number, b: number): number {
return a + b;
}
describe('Hàm sum', () => {
test('Nên trả về tổng đúng', () => {
// Arrange
const a = 2;
const b = 3;
// Act
const result = sum(a, b);
// Assert
expect(result).toBe(5);
});
});
Mô hình AAA giúp phân chia rõ ràng giữa các bước kiểm thử, từ đó tăng tính ổn định và độ tin cậy của unit test.
Kết Luận
Trong phần này, chúng ta đã cùng nhau tìm hiểu các khái niệm quan trọng trong kiểm thử đơn vị và test double. Cảm ơn các bạn đã dành thời gian đọc bài viết, hẹn gặp lại trong phần tiếp theo!
Tài Liệu Tham Khảo
- Mocks Aren't Stubs
- The Little Mocker
source: viblo