Part II — Understanding about RuleChain
Introduction
Tulisan kali ini adalah lanjutan dari Part I — Why we need TestRule and how it works ?? ..
Dalam satu test class, kita dapat membuat lebih dari satu @get:Rule, seperti contoh dibawah ini:
Berdasarkan cara kerja TestRule yang sudah dijelaskan Part I — Why we need TestRule and how it works ?? . Jika terdapat lebih dari satu anotasi @get:Rule maka mana yang akan dieksekusi terlebih dahulu ?
If there are multiple annotated {@get:Rule }s on a class, they will be applied in order of fields first, then methods.
However, if there are multiple fields (or methods) they will be applied in an order that depends on your JVM's implementation of the reflection API, which is undefined, in general.
Jadi, bagaimana jika kita membutuhkan lebih dari satu TestRule dan kita mempunyai kebutuhan untuk menjaga urutan proses eksekusi dari TestRule yang telah kita buat ?? Jawabannya adalah dengan menggunakan RuleChain..!!
What is RuleChain
RuleChain memiliki kemampuan untuk mengeksekusi TestRule sesuai dengan urutan yang kita inginkan. Untuk membuat RuleChain, kita perlu menambahkan outerRule(TestRule) dan dapat diikuti oleh pemanggilan method around(TestRule) sesuai kebutuhan.
@get:Rule
val rule = RuleChain.outerRule(testRuleLangit)
.around(testRuleDaratan)
.around(testRuleLautan)
- outerRule(TestRule) adalah sebuah method yang mengembalikan nilai RuleChain dengan satu TestRule. Method ini adalah starting point of the RuleChain. Jadi, TestRule yang dilalukan kedalam method ini adalah TestRule yang akan pertama kali dieksekusi.
- around(TestRule) adalah sebuah method yang akan membuat RuleChain baru. TestRule yang dilalukan kedalam method ini akan disambungkan dengan TestRule yang sudah ada. Jadi, TestRule yang dilalukan kedalam method ini akan dieksekusi setelah TestRule sebelumnya.
- Jadi, berdasarkan potongan sample code diatas. TestRule yang akan dijalankan pertama kali adalah testRuleLangit lalu dilanjutkan oleh testRuleDaratan dan dilanjutkan dengan testRuleLautan.
So, how it works ?
Kurang lebih, RuleChain akan bekerja seperti dibawah ini :
Untuk cara membuat testRule bisa cek kembali ke Part I dari artikel ini ya..
Jika gambar diatas dieksekusi maka outputnya akan seperti dibawah ini
Before evaluate on TestRuleLangit
Before evaluate on TestRuleDaratan
Before evaluate on TestRuleLautan
Test executed
TestRuleLautan Finish
TestRuleDaratan Finish
TestRuleLangit finish
Jadi, mudah bukan cara menggunakan RuleChain ? Dengan kita mengatur urutan dari testRule yang akan dieksekusi, kita dapat memastikan test yang akan dieksekusi memiliki persiapan yang benar.
Berikut adalah contoh penggunaan dari RuleChain yang sering saya lakukan :
Gimana nihhh artikelnya ?? Cukup membantu untuk memahami RuleChain kannn … ayo berikan claps untuk support dan tinggalkan komentar untuk berdiskusi. Semoga bermanfaat ya guys =D
Bonus nihh guys .. buat contoh dari RepeatTestRule dan RuleChainExample bisa cek di github ya