Spock Test Wording -BDD Style
Spock Framework digunakan untuk Behavioral Driven Development ( BDD ). BDD memastikan bahwa pengujian dapat dibaca oleh manusia, sehingga tanpa harus mendalami kode, seseorang dapat dengan mudah membaca, menulis, dan memeliharanya. Kata-kata yang tepat juga memastikan dapat digunakan kembali, karena seseorang dapat dengan mudah mengetahui kapan sepotong kode uji (atau kode aplikasi) dapat digunakan kembali di tempat lain. Untuk memastikan hal ini, tes harus disusun untuk membentuk kalimat alami dalam bentuk persyaratan perangkat lunak.
Aturan sederhana untuk memastikan tes Anda ditulis dengan baik adalah:
Bacakan dengan lantang kalimat-kalimat di dalam blok, dengan koma setelah setiap blok. Jika kalimat tersebut terdengar benar secara tata bahasa, dan terdengar seperti persyaratan perangkat lunak standar, maka pengujian Anda benar.
Studi kasus
Tes untuk fungsi getUser() di layanan pengguna. (perhatikan kata kunci yang dicetak tebal)
Nama tes (persyaratan):
getUser harus mengembalikan pengguna ketika pengguna ada di db pengguna
Detail tes (persyaratan pendefinisian kalimat alami yang lebih panjang)
mengingat bahwa repositori akan mengembalikan pengguna, dan layanan detail akan mengembalikan detail pengguna, ketika getUser dipanggil , maka harus mengembalikan pengguna yang valid.
Di bawah ini adalah bagian yang membentuk tes Spock BDD:
Nama tes
Nama tes harus ditulis sebagai persyaratan.
kata kunci: harus
benar: ✅
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"
Blok yang diberikan harus mewakili tindakan untuk menyiapkan data yang diperlukan untuk pengujian. Jangan gunakan blok yang diberikan hanya untuk mendefinisikan variabel dan tidak menyiapkan data apa pun. Variabel, jika tidak digunakan di blok yang diberikan, dapat didefinisikan di blok when.
kata kunci: kemauan
benar: ✅
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()
Kapan blok harus memiliki tindakan yang sedang diuji.
kata kunci: adalah
benar: ✅
when: 'getUser is invoked'
when: 'call getUser'
kata kunci: harus
Kemudian blok harus menentukan hasil yang diharapkan
benar: ✅
then: 'user should be returned'
then: 'reponse is correct'
then: 'user returned is correct'
then: 'assert reponse is correct'
![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































