Trong thực hành lập trình hướng hành vi (BDD), phát ngôn Cho (một thứ gì đó) – Khi … – Thì … là một cách để miêu tả một hành vi của hệ thống. Cấu trúc phát ngôn dạng này có vẻ như đã được chấp nhận rộng rãi trong nhiều test framework như Cucumber, Mocha… Ý tưởng cốt lõi của nó nằm trong ba phần:
- Given: tương đương với từ “cho trước” khi trình bày một lý luận. Phát ngôn given được dùng để đặt trạng thái cho thế giới của ca kiểm thử trước khi chúng ta cho hệ thống thực hiện hành vi của nó. Hiểu đơn giản thì given mô tả điều kiện/trạng thái tiên quyết cần chuẩn bị trước.
- When: miêu tả hành vi của hệ thống đang được mang ra kiểm thử
- Then: miêu tả những ảnh hưởng/thay đổi mà chúng ta kỳ vọng sẽ xuất hiện sau khi hệ thống thực hiện hành vi
Dưới đây là một ví dụ đơn giản:
Chức năng: Người dùng bán cổ phiếu Bài thử: Người dùng yêu cầu bán trước khi kết thúc giao dịch Đặt vấn đề tôi có 100 cổ phiếu MSFT Và tôi có 150 cổ phiếu APPL Và thời gian giao dịch chưa kết thúc Khi tôi hỏi bán 20 cổ phiếu MSFT Thì tôi phải còn lại 80 cổ phiếu MSFT Và tôi phải còn lại 150 cổ phiếu APPL Và một lệnh bán 20 cổ phiếu MSFT phải được thực hiện
Chúng ta thấy là một GivenWhenThen được mô tả bằng ngôn ngữ rất tự nhiên. Given ở đây là như là điều kiện cần cho phép kiểm thử. Trong các test framework, các phát ngôn Given sẽ trở thành một tập hợp các câu lệnh (được gọi là “setup” giúp đưa system-under-test về đúng trạng thái mong muốn trước khi bắt đầu thực hiện hành vi.
Mặc dù GivenWhenThen là đặc trưng của BDD, nhưng ý tưởng của nó thật ra khá phổ biến khi viết kiểm thủ hay khi cần mô tả requirement dưới dạng các ví dụ. Nó cũng là một cách thức tốt để phát ngôn về các Acceptance Test/Definition of Done/Acceptance Criteria khi mô tả User Story để phát triển phần mềm.