Part I — Why we need TestRule and how it works ?

Part I — Why we need TestRule and how it works ?

Introduction

Dalam implementasi dari Test Driven Delevopment (TDD) maka kita diharuskan untuk membuat test terlebih dahulu sebelum menambahkan fungsionalitas baru di aplikasi. Jenis test yang seringkali dilakukan adalah Small Test, Medium Test dan Large Test. Ketiga jenis test tersebut adalah berdasarkan level of the testing pyramid.

Dalam penerapannya kita akan sering bertemu dengan TestRule dan sekarang kita akan membahas mengapa kita memerlukan TestRule dan bagaimana itu bekerja……

Dokumentasi JUnit.org mengatakan bahwa

TestRules can do everything that could be done previously with methods annotated with Before, After, BeforeClass, or AfterClass, but they are more powerful, and more easily shared between projects and classes.

Hah ?? Jadi maksudnya ada proses lain sebelum @Test dieksekusi ? Jawabannya adalah YA !!

Flow Test

Pada gambar dibawah ini akan menjelaskan flow dari sebuah @Test yang akan dieksekusi.

Sebagai tambahan informasi, @get:Rule hanya dapat digunakan di bahasa pemograman kotlin. Jika kamu lebih menyukai java maka kamu bisa menggunakan @Rule. Perbedaanya dimana ?? bisa dilihat disini.

Jika @get:Rule kurang lebih mirip dengan @Before dan @After … lalu mengapa kita memerlukannya ?

Mudah untuk digunakan pada beberapa test

Pada umumnya, sebelum test dijalankan maka memerlukan beberapa tahapan terlebih dahulu seperti launch activity, Intent.init(), menyiapkan data dan lain-lain. Maka akan lebih baik jika membungkus tahapan-tahapan tersebut dalam sebuah TestRule daripada kita harus mengulang tahapan tersebut disetiap file test. Jadi, ketika kita diharuskan untuk membuat sebuah test baru yang memerlukan tahapan yang sama maka kita cukup menggunakan TestRule pada test tersebut.

Bisa menggunakan lebih dari satu TestRule dalam satu test

Jika anda melihat poin nomor 1 dan terfikir seperti bentuk abstraksi maka jawabannya adalah YA BETUL !! tetapi ini lebih hebat. Pada bentuk abstraksi biasa, kita hanya diperbolehkan untuk mempunyai 1 parent saja, tetapi bagaimana jika kita butuh lebih dari 1 ??? Tentu saja jawabannya menggunakan TestRule. Karena kita dapat menggabungkan 2 TestRule atau lebih dalam 1 test dengan menggunakan RuleChain. Pada part II dari artikel ini, saya akan menjelaskan bagaimana cara memakai RuleChain dan cara dia bekerja.

Dapat dilihat bahwa Test Class 2 bisa menggunakan Test Rule 1 dan Test Rule 2 secara bersamaan. Tetapi, jika kita menggunakan lebih dari 1 TestRule maka TestRule yang akan dieksekusi terlebih dahulu ?? Pada part II semua akan dijelaskan =D

So, how it works dude ??!!

Kurang lebih cara kerjanya adalah seperti berikut :

Bonus nihh buat kalian yang mau coba untuk membuat TestRulenya sendiri … =D

2. Kita harus menjalankan fungsi evaluate yang dimiliki oleh base untuk dapat mengeksekusi test

3. SELAMAT !!!! Kamu udah berhasil membuat TestRule sendiri… mudah bukann ? Buat kamu yang lagi semangat, ada bonus tambahan lagi nihh, untuk penggunaan description yang ada di apply method.

Buat annotation class baru dan modify PrintRule menjadi seperti dibawah ini

Jadi, saat membuat test baru kamu bisa menambahkan @PrintAfterTest. Jika kamu menambahkan anotasi tersebut maka after statement executed akan di print. Description berisi deksripsi dari test yang sedang dijalankan seperti anotasinya, nama test dan lain sebagainya.

Gimana nihhh artikelnya ?? Cukup membantu untuk memahami TestRule kannn … ayo berikan claps untuk support dan tinggalkan komentar untuk berdiskusi. =D

Part II — Understanding about RuleChain