Tutorial Membuat Unit Test
Tujuan dari tutorial unit test ini adalah agar teman-teman bisa mengerti pembuatan unit test didalam pemrograman java, tanpa menggunakan framework, menggunakan library JUnit saja.
Mungkin teman-teman pembaca sudah pernah membuat unit test pada project teman-teman. Mungkin ada yang pernah membuatnya from scratch, atau mungkin hanya “copas” saja dari unit test yang sudah dibuat sebelumnya oleh rekan tim ataupun developer lainnya yang lebih senior.
Seperti saya waktu pertama kali belajar unit test, teman-teman yang pernah buat unit test pun mungkin hanya mengerti apabila membuatnya didalam project Spring Framework (ataupun Spring Boot) dan belum pernah membuatnya didalam project java plain/vanilla, tanpa framework.
Bayangkan, setelah bertahun-tahun teman-teman ada di perusahaan yang pakai framework Spring misalnya, kemudian teman-teman “dipaksa” untuk pakai framework lain, atau bahkan pakai project plain java saja, tanpa Spring. Lalu teman-teman bingung:
“waduh biasanya saya bikin unit test itu pakai anotasi SpringBootTest, ngga ngerti caranya gimana kalo ga pakai Spring”.
Nah, pada kesempatan hari ini, saya ingin sharing tentang bagaimana membuat unit test didalam project java, tanpa framework, hanya dengan bantuan maven untuk men-download dependency library untuk dipakai didalam unit test.
Menyiapkan Dependency JUnit
Seperti yang sudah saya sebutkan diatas, kita akan menggunakan JUnit sebagai library unit test, karena didalam SDK java (JDK) sendiri belum ada library untuk membuat unit test. Untuk membantu kita dalam men-download dan compile library nya, kita akan menggunakan Maven.
Pertama-tama kita masukkan dependency junit di dalam file pom.xml project kita.
<dependencies>
...
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
...
</dependencies>
Kemudian, kita download dependency JUnit dengan cara menjalankan maven command sebagai berikut:
mvn clean install -U
Membuat utility class
Dalam tutorial ini, kita akan membuat suatu utility class sebagai class yang akan kita test. Untuk memudahkan, mari kita buat satu utility class yang simpel yang sudah sering kita temui, yaitu StringUtils. Mari kita buat sebuah method untuk melakukan pengecekan apakah suatu String itu null atau kosong dan kita namakan isEmpty.
public class StringUtils {
public static boolean isEmpty(String str) {
return str == null || "".equals(str);
}
//another method, etc..
}
Sebagai informasi tambahan, class StringUtils sebenarnya sudah dapat teman-teman temui di dalam library Apache Commons ataupun library Spring Framework. Pada project real nanti, saya sarankan teman-teman tidak perlu membuat custom utility class sendiri dan dapat menggunakan StringUtils atau ObjectUtils bawaan dari Spring Framework ataupun Apache Commons.
Membuat Unit Test
Setelah kita buat class StringUtils dan method isEmpty, sekarang saatnya kita membuat class unit test dari class StringUtils dan method isEmpty ini. Biasanya, class test akan dibuat di dalam package src.test, dinamai dengan nama yang sama seperti class sebenarnya dan ditambahkan Test dibelakangnya.
Karena class yang akan kita test adalah StringUtils, maka kita akan buat class test nya dengan nama StringUtilsTest.
public class StringUtilsTest {
}
Kemudian, yang paling penting yang harus teman-teman siapkan adalah: skenario-skenario yang akan terjadi apabila method tersebut dipanggil dan apa yang harusnya terjadi (Assert).
Karena method isEmpty yang sudah kita buat dapat menerima parameter masukan String, maka skenario yang harus kita siapkan adalah sebagai berikut.
Skenario Testing:
Apabila dimasukkan string kosong, method akan return true.
Apabila dimasukkan null, method akan return true.
Apabila dimasukkan value string normal, method akan return false.
Sekarang, mari kita jabarkan satu per satu skenario nya, kemudian kita buat masing-masing satu method unit test untuk setiap skenario nya. Jangan lupa tambahkan anotasi Test untuk setiap method test yang kita buat agar dapat dikenali oleh library JUnit.
//Apabila dimasukkan string kosong, method akan return true.
@Test
public void testStringEmpty() {
}
//Apabila dimasukkan null, method akan return true.
@Test
public void testStringNull() {
}
//Apabila dimasukkan value string normal, method akan return false.
@Test
public void testStringNotEmpty() {
}
Perlu diperhatikan, penamaan method test yang kita buat harus informatif agar kita dan orang lain yang membaca class test kita tahu apa yang akan method tersebut lakukan.
Setelah kita membuat tiga buah method test tersebut, barulah kita mulai menulis test yang akan kita lakukan.
Menurut hemat saya, dalam sebuah method unit test, minimal wajib terdiri dari:
Persiapan data-data yang dibutuhkan untuk mengetes.
Pemanggilan method test.
Pengecekan (Assertion) apakah method tersebut menghasilkan value yang sesuai.
//Apabila dimasukkan string kosong, method akan return true.
@Test
public void testStringEmpty() {
//prepare test data
String strToTest = "";
//do test
boolean isEmpty = StringUtils.isEmpty(strToTest);
//assertion
Assert.assertTrue(isEmpty);
}
Kemudian, untuk menjalankan unit test, ada beberapa cara yang dapat kita lakukan. Dalam tutorial ini saya akan menjelaskan dua cara, yaitu dengan command maven dan dengan bantuan dari IDE yang saya pakai yaitu IntelliJ IDEA.
Menjalankan Unit Test menggunakan Maven
Secara default, apabila kita menjalankan build maven, maven akan otomatis menjalankan seluruh test class di dalam project kita. Buka terminal, kemudian jalankan command maven dibawah untuk menjalankan semua test class yang sudah kita buat. Karena kita hanya punya satu class yaitu StringUtilsTest, hanya akan ada satu class test yang dijalankan oleh maven.
mvn clean install -U
Namun, apabila kita hanya ingin menjalankan class test tertentu saja, kita dapat menggunakan command sebagai berikut
mvn test -Dtest=StringUtilsTest
Apabila berhasil dijalankan, pada terminal kita akan tampil pesan sukses build dan summary dari test class yang dijalankan oleh JUnit.
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.akhmadreiza.unittestexample.StringUtilsTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.025 sec
Results :
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.409 s
[INFO] Finished at: 2022-02-27T01:00:22+07:00
[INFO] ------------------------------------------------------------------------
Menjalankan Unit Test menggunakan IntelliJ IDEA
Selain menggunakan command maven, kita juga dapat menjalankan test dari IDE kita. Semestinya IDE “jaman now” sudah bisa running class JUnit tanpa tambahan plugin. Dalam tutorial ini saya menggunakan IDE IntelliJ.
Untuk menjalankan keseluruhan method unit test di dalam class test, kita dapat menekan tombol “play” yang berada disamping class test yang sudah kita buat. Selain itu, kita juga dapat menekan tombol play yang ada disamping method test yang sudah kita buat untuk menjalankan test untuk method itu saja.

Kesimpulan
Pada tutorial kali ini, kita sudah berhasil membuat unit test pada project Java menggunakan library JUnit, tanpa menggunakan framework.
Untuk dapat melihat full source code nya teman-teman bisa lihat langsung di repo github saya. Silakan teman-teman star repo nya, nantinya setiap tutorial yang saya post di blog saya source code nya akan saya update ke repo saya tersebut.
Nah, buat teman-teman yang mau menambahkan skenario unit test untuk method isEmpty tersebut, silakan teman-teman fork repo saya, buat unit test nya dan open PR ke saya. Dengan berkontribusi di public repo seperti repo saya, selain untuk sarana latihan, kontribusi teman-teman akan tercatat di github teman-teman dan dapat membuat github teman-teman lebih ciamik dan berwarna, He he he.
Sekian tutorial dari saya, sampai ketemu di postingan-postingan berikutnya. Bye!