Bạn dùng loại test double nào cho payment gateway: stub, mock hay fake?
Đáp án mẫu
Còn tuỳ test cần gì, và thường một bộ test dùng nhiều loại khác nhau. Unit test không bao giờ nên gọi payment gateway thật.
Dùng stub khi bạn cần một câu trả lời dựng sẵn để điều khiển code: "gateway chấp nhận" hoặc "gateway từ chối". Nó không có logic và không kiểm tra gì, và là lựa chọn đơn giản nhất.
Dùng mock hoặc spy khi hành vi cần kiểm tra chính là lời gọi đi ra, ví dụ lệnh charge được gửi đúng một lần với đúng số tiền và một idempotency key.
Dùng fake khi nhiều test cần hành vi giống gateway có state: một gateway in-memory ghi lại các lần charge, từ chối một thẻ test cụ thể và trả cùng kết quả cho cùng một idempotency key. Nó tốn công viết hơn nhưng giữ cho test dễ đọc.
Dummy là object bạn chỉ truyền vào cho đủ tham số, như một logger mà test không bao giờ đọc.
Hãy chọn loại double đơn giản nhất trả lời được câu hỏi của test, và dùng vài integration test để phủ gateway sandbox thật.
Ý chính
- Stub trả về kết quả dựng sẵn như chấp nhận hoặc từ chối
- Mock hoặc spy kiểm tra lời gọi charge đi ra
- Fake thêm state thực tế như idempotency
- Unit test không bao giờ gọi gateway thật
Câu hỏi nối tiếp thường gặp
- Bạn giữ fake gateway nhất quán với sandbox thật như thế nào?
Lỗi thường gặp
- Dùng mock khi stub là đủ
- Gọi payment gateway thật từ unit test