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 TestMedium 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

TestRulescan 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 activityIntent.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.

TestRule yang sama dapat digunakan pada beberapa Test Class

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 :

  1. JUnit membaca test class kita dan akan mencari field dengan anotasi @get:Rule
  2. JUnit akan memanggil apply method yang ada didalam TestRule dan melamparkan informasi mengenai test yang sedang dijalankan. Informasi tersebut dilemparkan melalui Statement
  3. TestRule tersebut akan membuat sebuah instance baru dari Statement dan di return pada apply method
  4. Didalam apply method, harus menjalankan evaluate method yang dimiliki oleh Statement untuk menjalankan test tersebut

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

  1. Buat class baru dengan nama PrintTestRule dan extend TestRule serta override apply method

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

https://github.com/danidiprana/TestRule/blob/master/app/src/test/java/com/diprana/testrule/DemoTest.kt

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

Related Posts

Streaming Festival Disrupto Exploration and Experimentation 2020

Streaming Festival Disrupto Exploration and Experimentation 2020

Resiko Berbahaya menggunakan VPN gratisan di Laptopmu!

Resiko Berbahaya menggunakan VPN gratisan di Laptopmu!

Part II — Understanding about RuleChain

Mengenal dasar RxSwift

No Comment

Leave a Reply

Your email address will not be published. Required fields are marked *

Tags