Spock Test Wording - สไตล์ BDD
Spock Frameworkใช้สำหรับ Behavioral Driven Development ( BDD ) BDD รับรองว่าการทดสอบนั้นมนุษย์สามารถอ่านได้ โดยไม่จำเป็นต้องลงลึกในโค้ด ก็สามารถอ่าน เขียน และบำรุงรักษาได้อย่างง่ายดาย การใช้ถ้อยคำที่เหมาะสมยังช่วยให้แน่ใจว่าสามารถนำกลับมาใช้ใหม่ได้ เนื่องจากใคร ๆ ก็สามารถทราบได้อย่างง่ายดายว่าเมื่อใดที่สามารถนำรหัสทดสอบ (หรือรหัสแอปพลิเคชัน) กลับมาใช้ที่อื่นได้ เพื่อให้แน่ใจว่าสิ่งนี้ การทดสอบควรเขียนเป็นประโยคธรรมชาติในรูปแบบของข้อกำหนดของซอฟต์แวร์
กฎง่ายๆ เพื่อให้แน่ใจว่าการทดสอบของคุณเขียนได้ดีคือ:
อ่านออกเสียงประโยคในบล็อกโดยมีเครื่องหมายจุลภาคตามหลังแต่ละบล็อก หากประโยคฟังดูถูกต้องตามหลักไวยากรณ์ และฟังดูเหมือนข้อกำหนดซอฟต์แวร์มาตรฐาน แสดงว่าการทดสอบของคุณถูกต้อง
กรณีศึกษา
การทดสอบฟังก์ชัน getUser() ในบริการผู้ใช้ (สังเกตคีย์เวิร์ดเป็นตัวหนา)
ชื่อการทดสอบ (ข้อกำหนด):
getUser ควรส่งคืนผู้ใช้เมื่อมีผู้ใช้อยู่ในฐานข้อมูลผู้ใช้
รายละเอียดการทดสอบ (ข้อกำหนดในการกำหนดประโยคธรรมชาติที่ยาวขึ้น)
เนื่องจากที่เก็บจะส่งคืนผู้ใช้และบริการรายละเอียดจะส่งคืนรายละเอียดผู้ใช้เมื่อเรียกใช้getUser ก็ควรส่งคืนผู้ใช้ที่ถูกต้อง
ด้านล่างนี้เป็นส่วนที่สร้างการทดสอบ Spock BDD:
ชื่อการทดสอบ
ควรเขียนชื่อการทดสอบเป็นข้อกำหนด
คำค้น : ควร
ถูกต้อง: ✅
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"
บล็อกที่กำหนดควรแสดงถึงการดำเนินการเพื่อตั้งค่าข้อมูลที่จำเป็นสำหรับการทดสอบ อย่าใช้บล็อกที่กำหนดเพื่อกำหนดตัวแปรเท่านั้นและไม่ได้ตั้งค่าข้อมูลใดๆ ตัวแปร หากไม่ได้ใช้ในบล็อกที่กำหนด สามารถกำหนดได้ในบล็อกเมื่อ
คำค้น : จะ
ถูกต้อง: ✅
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()
เมื่อบล็อคควรมีการทดสอบการกระทำ
คำค้น : คือ
ถูกต้อง: ✅
when: 'getUser is invoked'
when: 'call getUser'
คำค้น : ควร
จากนั้นบล็อกควรระบุผลลัพธ์ที่คาดหวัง
ถูกต้อง: ✅
then: 'user should be returned'
then: 'reponse is correct'
then: 'user returned is correct'
then: 'assert reponse is correct'




































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)