Spock Test Wording -BDD Style

Mar 19 2023
Spock Framework được sử dụng cho Phát triển theo định hướng hành vi (BDD). BDD đảm bảo rằng các bài kiểm tra có thể đọc được bằng con người, sao cho không nhất thiết phải đi sâu vào mã, người ta có thể dễ dàng đọc, viết và duy trì chúng.

Spock Framework được sử dụng cho Phát triển hướng hành vi ( BDD ). BDD đảm bảo rằng các bài kiểm tra có thể đọc được bằng con người, sao cho không nhất thiết phải đi sâu vào mã, người ta có thể dễ dàng đọc, viết và duy trì chúng. Từ ngữ thích hợp cũng đảm bảo khả năng sử dụng lại, vì người ta có thể dễ dàng biết khi nào một đoạn mã kiểm tra (hoặc mã ứng dụng) có thể được sử dụng lại ở nơi khác. Để đảm bảo điều này, các bài kiểm tra nên được diễn đạt để tạo thành các câu tự nhiên dưới dạng các yêu cầu phần mềm.

Một quy tắc đơn giản để đảm bảo bài kiểm tra của bạn được viết tốt là:

Đọc to các câu trong các khối, có dấu phẩy sau mỗi khối. Nếu câu nghe đúng ngữ pháp và giống như một yêu cầu phần mềm tiêu chuẩn, thì bài kiểm tra của bạn là chính xác.

nghiên cứu điển hình

Kiểm tra chức năng getUser() trong dịch vụ người dùng. (chú ý các từ khóa in đậm)

Tên bài kiểm tra (yêu cầu):

getUser sẽ trả lại người dùng khi người dùng tồn tại trong db người dùng

Chi tiết kiểm tra (yêu cầu xác định câu tự nhiên dài hơn)

với điều kiện là kho lưu trữ sẽ trả về một người dùng và dịch vụ chi tiết sẽ trả về thông tin chi tiết về người dùng, khi getUser được gọi, thì nó sẽ trả về một người dùng hợp lệ.

Dưới đây là các phần tạo thành bài kiểm tra Spock BDD:

tên kiểm tra

Tên bài kiểm tra nên được viết theo yêu cầu.

từ khóa: nên

đúng: ✅

def "getUser should return a user when a user exists in the users db"
def "when a user exists in the db, getUser should return a user"

def "getUser returns user" //this is not describing what should happen
def "getUser test"
def "when user exists in db, getUser returns user"

Các khối đã cho sẽ đại diện cho một hành động để thiết lập dữ liệu cần thiết cho thử nghiệm. Không sử dụng các khối đã cho chỉ để xác định các biến và không thiết lập bất kỳ dữ liệu nào. Các biến, nếu không được sử dụng trong các khối đã cho, có thể được xác định trong khối when.

từ khóa: sẽ

đúng: ✅

given: 'repository will return a user'
User user = User.builder().id(123).build()
1 * repository.findById(id) >> user
and:  'details service will return user details'
1 * detailsService.getUserDetails(id) >> userDetails

given: 'repository returns a user' //wrong tense
User user = User.builder().id(123).build()
given: 'user object' //this is not defining any data setup. this is simply a variable.
User user = User.builder().id(123).build()

Khi các khối nên có hành động đang được thử nghiệm.

từ khóa: là

đúng: ✅

when: 'getUser is invoked'

when: 'call getUser'

từ khóa: nên

Sau đó, các khối sẽ chỉ định kết quả mong đợi

đúng: ✅

then: 'user should be returned'

then: 'reponse is correct'
then: 'user returned is correct'
then: 'assert reponse is correct'