Saat kita melakukan pengujian, baik itu unit testing maupun integration testing kita akan selalu membutuhkan sebuah data untuk melakukan pengujian tersebut. Biasanya data yang dibutuhkan adalah berupa sebuah objek dari kelas domain model. Pada tutorial ini saya akan memperkenalkan sebuah kelas util yang digunakan untuk membuat sebuah objek data pengujian.
Mungkin pembaca akan bertanya kenapa perlu membuat kelas yang khusus digunakan untuk membuat sebuah objek domain kalau dengan proses instantiasi biasa dan kemudian menggunakan setter atau constructor untuk memberikan nilai pada property saja bisa. Dengan menggunakan builder ini proses pembentukan objek akan menjadi simpel dan informatif, setidaknya itu yang saya rasakan. Sekarang coba perhatikan jika kita akan menggunakan objek dari kelas Book pada pengujian kita, maka yang biasa terjadi adalah sebagai berikut
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
public class Book{ private Long id; private String title; private String author; private String description; public Book(){} public Book(Long id,String title, String author, String description){ this.id=id; this.title=title; this.author=author; this.description=description; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } |
Kelas diatas adalah kelas pojo seperti biasa. Pada saat pengujian kita akan melakukan instantiasi seperti berikut
1 2 3 4 5 |
Book book=new Book(); book.setId(1L); book.setTitle("Java Spring"); book.setAuthor("Rod Gosling"); book.setDescription("Great book focus on Java Spring framework"); |
Memang tidak ada yang salah dengan cara diatas tetapi menulis unit testing adalah kegiatan yang cukup membosankan, jika ditambah dengan menulis kode seperti diatas akan tambah bosan. Kita membuat sebuah instance kemudian menulis objek diikuti memanggil method setter sebanyak setter yang dimiliki oleh kelas yang bersangkutan. Jika ada 10 method maka kita akan melakukannya sebanyak 10 kali dan menulisnya secara multiple row kebawah. Boros tempat 😀
Pendekatan lain adalah dengan menggunakan constructor seperti kode dibawah ini
1 |
Book book=new Book(1L,"Java Spring","Rod Gosling","Great book focus on Java Spring framework"); |
Kali ini kode yang ditulis tidak boros baris seperti tadi menggunakan setter, justru malah sangat hemat tempat dengan hanya menggunakan satu baris alias one liner istilah kerennya. Akan tetapi, jeleknya dari kode diatas adalah tidak informatif, kita akan susah mengetahui apakah parameter kedua “Java Spring” adalah judul buku atau penulis buku. Untuk kode diatas tidak terlalu kelihatan pengaruhnya tetapi jika ada misal 10 property baru terasa kebingungannya.
Sekarang akan kita jajaki pendekatan ketiga menggunakan builder yang akan menutupi kekurangan pada cara setter yaitu membosankan dan kekurangan pada cara constructor yaitu tidak informatif. Berikut ini adalah kelas BookBuilder yang saya tulis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
public class BookBuilder{ private Book book; public BookBuilder(){ book=new Book(); } public BookBuilder id(Long id){ book.setId(id); return this; } public BookBuilder title(String title){ book.setTitle(title); return this; } public BookBuilder author(String author){ book.setAuthor(author); return this; } public BookBuilder description(String description){ book.setDescription(description); return this; } public Book build(){ return book; } } |
Dengan menggunakan cara diatas maka untuk membuat sebuah objek dari kelas Buku dilakukan penulisan kode sebagai berikut ini
1 |
Book book=new BookBuilder().id(1L).title("Java Spring").author("Rod Gosling").description("Great book focus on Java Spring framework").build(); |
Atau dengan penulisan seperti dibawah ini
1 2 3 4 5 6 |
Book book=new BookBuilder() .id(1L) .title("Java Spring") .author("Rod Gosling") .description("Great book focus on Java Spring framework") .build(); |
Kode diatas terlihat simpel dan informatif bila dibandingkan dengan 2 pendekatan sebelumnya