Câu trả lời được chấp nhận
Given–When–Then là mẫu mô tả một kịch bản hành vi, gắn liền với phát triển hướng hành vi (behavior driven development — BDD):
- Given (Cho trước): bối cảnh, trạng thái ban đầu.
- When (Khi): hành động hoặc sự kiện.
- Then (Thì): kết quả quan sát được.
Agile Alliance mô tả đây là khuôn mẫu viết kiểm thử chấp nhận cho user story; các công cụ BDD như Cucumber, JBehave khuyến khích dùng mẫu này, nhưng nó cũng là hướng dẫn hữu ích khi không dùng công cụ nào.
Ví dụ (giả định) — story "khoá tài khoản sau nhiều lần đăng nhập sai":
- Kịch bản 1: Cho trước tài khoản đang hoạt động và đã nhập sai mật khẩu 4 lần liên tiếp; khi người dùng nhập sai lần thứ 5; thì tài khoản bị tạm khoá 15 phút và hiện thông báo hướng dẫn mở khoá.
- Kịch bản 2: Cho trước tài khoản đã nhập sai 4 lần; khi người dùng nhập đúng mật khẩu; thì đăng nhập thành công và bộ đếm lần sai về 0.
Viết cho gọn và đúng
- Mỗi kịch bản một hành vi; tránh chuỗi nhiều When–Then.
- Dùng ngôn ngữ nghiệp vụ, không mô tả thao tác giao diện chi tiết ("bấm nút xanh góc phải").
- Dữ liệu cụ thể (5 lần, 15 phút) thay vì từ mơ hồ ("nhiều lần", "một lúc").
- Viết trong buổi trao đổi giữa PO/BA, lập trình viên và tester (thường gọi là "ba người bạn") — giá trị lớn nhất là cuộc thảo luận làm lộ hiểu lầm.
Khi nào không cần: quy tắc đơn giản, ít trường hợp → danh sách gạch đầu dòng là đủ. Dùng Given–When–Then cho logic có nhiều nhánh, quy tắc nghiệp vụ quan trọng, hoặc khi đội muốn tự động hoá kiểm thử chấp nhận.
Nguồn: