Test Doubles
November 18, 2024Test Doubles là các đối tượng giả được sử dụng trong quá trình kiểm thử phần mềm để thay thế các đối tượng thật, giúp kiểm soát môi trường kiểm thử và tránh các phụ thuộc bên ngoài.
1. Dummy
Dummy là một đối tượng giả không có chức năng thực sự, chỉ được tạo ra để lấp chỗ trống cho các tham số trong các phương thức. Dummy tuân theo một interface hoặc yêu cầu về loại dữ liệu, nhưng không chứa bất kỳ logic nào.
Dummy được sử dụng khi một phương thức yêu cầu một đối tượng nhưng không thực sự sử dụng nó trong quá trình thực thi.
Ví dụ nếu một phương thức yêu cầu ba tham số, nhưng trong bài kiểm thử chỉ cần kiểm tra hai tham số đầu, ta có thể sử dụng Dummy cho tham số thứ ba. Chẳng hạn, trong một hàm gửi email, ta có thể sử dụng một đối tượng Dummy cho tham số người nhận nếu không quan tâm đến nội dung email.
2. Fake
Fake là một đối tượng có logic hoạt động nhưng không được thiết kế để sử dụng trong môi trường sản xuất vì nó không đủ phức tạp hoặc không phù hợp về mặt hiệu năng.
Fake được sử dụng để thay thế các đối tượng thật trong quá trình kiểm thử, giúp giảm độ phức tạp và tránh phụ thuộc vào tài nguyên ngoài.
Ví dụ một cơ sở dữ liệu trong bộ nhớ (in-memory database) có thể được dùng làm Fake trong quá trình kiểm thử. Nó cung cấp chức năng tương tự như cơ sở dữ liệu thực, nhưng nhanh hơn và không cần kết nối đến cơ sở dữ liệu thực sự.
3. Stub
Stub là một đối tượng giả cung cấp các phản hồi được định nghĩa trước cho các phương thức khi được gọi. Stub trả về dữ liệu đã được thiết lập từ trước và không thực thi bất kỳ logic phức tạp nào.
Stub được sử dụng để kiểm soát luồng kiểm thử bằng cách thay thế các phương thức phụ thuộc vào dữ liệu bên ngoài, như các cuộc gọi API hoặc truy vấn cơ sở dữ liệu.
Ví dụ khi kiểm thử một hàm tính toán dựa trên dữ liệu từ một API bên ngoài, ta có thể sử dụng Stub để trả về dữ liệu giả thay vì thực hiện cuộc gọi thực tế đến API đó.
4. Mock
Mock là một loại Stub có thêm chức năng xác minh các tương tác với nó, như số lần phương thức được gọi hoặc các tham số được truyền vào. Nó có thể kiểm tra cách mà đối tượng được sử dụng trong quá trình kiểm thử.
Mock không chỉ cung cấp phản hồi cho các phương thức như Stub, mà còn xác minh xem các phương thức có được gọi đúng cách hay không (bao nhiêu lần, với tham số nào).
Ví dụ khi kiểm thử một phương thức thanh toán, ta có thể dùng Mock để xác minh rằng phương thức xử lý thẻ tín dụng được gọi đúng số lần và với thông tin thẻ đúng.
5. Spy
Spy là một đối tượng giả bọc quanh một đối tượng thật. Spy ghi lại các tương tác với đối tượng thật (chẳng hạn, phương thức nào đã được gọi, với tham số nào) mà không làm thay đổi cách hoạt động của đối tượng thật.
Spy được sử dụng để theo dõi hành vi của các đối tượng thật trong khi vẫn cho phép chúng thực hiện chức năng bình thường. Điều này giúp kiểm thử các tương tác mà không thay đổi cách hoạt động của hệ thống.
Ví dụ khi kiểm thử một hệ thống log, ta có thể dùng Spy để ghi lại việc gọi hàm ghi log mà không làm thay đổi bản chất của việc log thông tin.
Tóm lại, mỗi loại Test Double phục vụ các mục đích khác nhau trong kiểm thử, giúp quản lý sự phụ thuộc và tạo ra môi trường kiểm thử có thể kiểm soát và đoán trước được.
– Dummy: Một placeholder không có chức năng thực sự, chỉ để lấp chỗ trong tham số.
– Fake: Có chức năng hoạt động nhưng không đủ phức tạp hoặc an toàn cho sản xuất.
– Stub: Cung cấp phản hồi được định trước, không có logic thực.
– Mock: Một Stub có thêm chức năng xác minh cách mà nó được gọi.
– Spy: Ghi lại tương tác với đối tượng thật mà vẫn cho phép đối tượng hoạt động như bình thường.