Mengetes Akses Database Menggunakan Spring-Test DBUnit

Spring-Test DBUnit

Pada tulisan yang lalu saya sudah membahas sedikit tentang [rad-hl]pengujian Unit[/rad-hl]. Pengujian unit adalah pengujian yang memeriksa behavior dari method yang dimiliki oleh kelas, apakah sesuai yang diinginkan atau tidak. Pengujian jenis ini bersifat terisolasi artinya tidak ada dependency dengan objek kelas yang lain (diganti dengan objek palsu / mock object).

Lain halnya dengan pengujian unit yang terisolasi, pengujian untuk mengetes akses basisdata pada kode yang kita tulis harus berhubungan dengan sistem basisdata. Pengujian jenis ini dinamakan dengan [rad-hl]integration testing[/rad-hl] / pengujian integrasi karena menggunakan sistem lain dalam pengujiannya.

Tulisan ini akan membahas mengenai pengujian akses basisdata pada aplikasi berbasis Spring menggunakan library [rad-hl]Spring-Test DBUnit[/rad-hl].

Spring-Test DBUnit

Spring-Test DBUnit menyediakan kemudahan bagi kita untuk melakukan pengujian akses basisdata dengan menggabungkan antara framework Spring testing dengan library DBUnit. Framework ini memungkinkan kita untuk mengeset dan menghapus (setup and teardown) tabel pada basisdata testing dengan menggunakan annotation sehingga basisdata testing selalu dalam keadaan bersih, isi tabel dengan sampel data secara otomatis ketika pengujian akan dijalankan dan hapus sampel data secara otomatis pula ketika pengujian telah selesai dijalankan. Lebih jelasnya nanti akan kita pelajari bersama.

Contoh Kasus

Sudah menjadi sifat dasar manusia bahwa untuk memahami sesuatu akan lebih mudah jika menggunakan contoh langsung, let’s get our hands dirty kata teman saya yang berkebangsaan belanda. Tutorial ini akan menggunakan project yang sudah dibuat sebelumnya pada tulisan berikut, disana saya membuat sebuah program crud menggunakan spring, hibernate dan maven. Jika belum pernah membuatnya saya sarankan untuk mempelajarinya terlebih dahulu.

Dependensi Library

Tambahkan beberapa dependensi library berikut untuk melakukan pengujian integrasi menggunakan spring-test dbunit

Konfigurasi Pengujian

Untuk melakukan pengujian akses basisdata ada beberapa langkah yang harus kita tempuh, yaitu sebagai berikut
1. Membuat skema tabel basisdata
2. Mengisi sampel data.
3. Menjalankan query.
4. Memeriksa basisdata untuk memastikan hasilnya benar.
5. Mengoreksi atau melanjutkan sesuai dengan hasil di nomor 4.

Bila kita melakukannya secara manual bisa saja tapi tidak efektif, belum lagi kalau ada banyak sekali yang harus kita uji. Kita gunakan [rad-hl]automated testing[/rad-hl], pernah saya bahas di sini

Semua kode maupun file-file yang berhubungan dengan pengujian diletakkan pada folder/subfolder [rad-hl]test[/rad-hl] dibawah folder src dari struktur maven project.
struktur

Konfigurasi Spring Context

Kita perlu membuat sebuah spring context baru khusus untuk pengujian yang berbeda sedikit dengan spring context pada aplikasi. Pada pengujian ini saya menggunakan basisdata MySql yang tentu saja berbeda dengan basisdata yang digunakan oleh aplikasi, banyak yang menyarankan untuk pengujian menggunakan basisdata Hsqldb saja yang ringan dan embedded, silahkan kalau mau coba, saya belum mengeksplornya :D.

Berikut adalah kelas konfigurasi dari spring context
file : src/test/java/com/agung/springhibernatemaven/init/WebAppConfigTest.java

Sedangkan untuk konfigurasi basisdata dan hibernate terdapat pada file [rad-hl]application.properties[/rad-hl] berikut
file : src/test/resources/application.properties

Dapat kita lihat bahwa nilai dari [rad-hl]hibernate.hbm2ddl.auto[/rad-hl] adalah [rad-hl]create-drop[/rad-hl] yang berarti ketika pengujian dijalankan maka akan membuat sebuah tabel berdasarkan kelas-kelas entity dan ketika pengujian sudah selesai tabel tersebut akan dihapus / di drop

Konfigurasi sampel data

Sudah saya kemukakan diatas tadi bahwa kita perlu menggunakan sampel data untuk melakukan pengujian. Saya pun sudah berjanji bahwa semua prosesnya akan diotomatisasi. Kalau tadi tabel sudah dibuatkan secara otomatis maka untuk mengisi data sampel pada tabel tersebut kita cukup membuat sebuah file xml untuk kemudian diisikan secara otomatis ke tabel oleh DBUnit, menyenangkan bukan?

Berikut adalah file xml dataset yang digunakan pada pengujian
file : src/test/resources/sampleData.xml

Menulis Pengujian

Saatnya kita menulis pengujian integrasi kita, dan berikut ini adalah kode pengujian integrasi untuk kelas [rad-hl]LaguDaoImpl[/rad-hl] yang dibuat pada tulisan yang lalu.

file : src/test/java/com/agung/springhibernatemaven/dao/LaguDaoImplIT.java

Saya yakin kode diatas mudah untuk dipahami. Beberapa yang perlu diberi penjelasan adalah kita menggunakan annotaion [rad-hl]@DatabaseSetup[/rad-hl] untuk memuat file dataset sehingga tiap method tes dijalankan maka dbunit akan mengisi sampel data dan ketika eksekusi method berakhir data dihapus.
Sisanya adalah method standar yang dimiliki oleh JUnit untuk melakukan pengujian dengan membandingkan nilai. [rad-hl]assertEquals[/rad-hl] digunakan untuk membandingkan apakah kedua nilai bernilai sama, [rad-hl]assertNotNull[/rad-hl] akan mengecek apakah variabel bernilai tidak null, sedangkan [rad-hl]assertNull[/rad-hl] mengecek apakah variabel bernilai null.

Jalankan pengujian dan berikut adalah hasilnya jika menggunakan Netbeans
test results

Source Code

Source code dapat didownload pada Github saya disini

Referensi

http://software.endy.muhardin.com/java/ruthless-testing-4/
http://springtestdbunit.github.io/spring-test-dbunit/

Facebook Comments
 

Agung Setiawan

Agung Setiawan adalah software engineer di BukaLapak.com, penulis sekaligus pecinta sastra, dan pembaca buku

 
Halo, perkenalkan saya Agung Setiawan.
Saya Software Engineer di BukaLapak.
Simak pemikian saya soal dunia Software Engineering via Twitter di @agungsetiawanmu dan facebook
Blog ini saya update seminggu sekali jadi sering-sering saja mampir
Mau belajar Vim bareng saya?
Belajar ngoding dari nol menggunakan PHP

Leave a Reply

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