Bikin Aplikasi C# Anti Bug Yuk Kita Belajar Unit Testing xUnit

Share
Bikin Aplikasi C# Anti Bug Yuk Kita Belajar Unit Testing xUnit
Photo by Fajar Herlambang STUDIO/Unsplash

Pernah gak sih ngerasa aplikasi yang kita bikin udah oke banget tapi pas dirilis malah banjir laporan bug dari user yang bikin pusing tujuh keliling. Rasanya seperti sudah berjuang maksimal membangun kode yang bersih tapi ternyata masih ada saja celah kecil yang terlewatkan. Kejadian seperti ini sering banget menimpa kita para developer apalagi kalau deadline sudah mepet dan kita tidak sempat mengecek setiap sudut logika program secara manual. Nah di sinilah peran penting unit testing hadir sebagai penyelamat hari agar kita bisa tidur lebih nyenyak tanpa bayang bayang error yang menghantui di masa depan.

Dalam artikel kali ini kita bakal ngobrol santai tentang cara bikin aplikasi C# yang lebih tangguh dan tahan banting menggunakan framework xUnit. Kita akan belajar bareng bagaimana cara menulis kode pengujian yang asik dan efisien sehingga setiap perubahan kode yang kita buat tidak akan merusak fitur yang sudah ada sebelumnya. Menulis test mungkin terdengar seperti menambah beban kerja pada awalnya tapi percayalah bahwa investasi waktu ini akan sangat berharga saat aplikasi kita mulai besar dan kompleks. Yuk kita mulai petualangan coding kita kali ini dengan semangat belajar yang tinggi.

Kenapa Kita Harus Peduli Dengan Unit Testing

Seringkali kita merasa bahwa membuat unit testing itu membuang waktu karena kita harus menulis kode tambahan hanya untuk mengetes kode yang sudah ada. Namun kalau kita melihat dari perspektif jangka panjang unit testing sebenarnya adalah alat penghemat waktu yang sangat luar biasa. Bayangkan saat kita harus melakukan refactoring atau mengubah struktur kode yang sudah sangat besar. Tanpa unit testing kita akan merasa was was apakah perubahan kecil tadi bakal merusak bagian lain yang tidak terduga. Dengan adanya unit testing kita tinggal menjalankan semua pengujian dan dalam hitungan detik kita tahu apakah aplikasi kita masih sehat atau sedang sakit.

Unit testing juga membantu kita mendesain kode dengan lebih baik karena biasanya kode yang mudah dites adalah kode yang modular dan rapi. Kalau kita merasa kesulitan menulis unit testing untuk sebuah fungsi itu tandanya fungsi tersebut mungkin terlalu rumit atau memiliki terlalu banyak tanggung jawab. Jadi selain memastikan aplikasi kita bebas dari bug unit testing secara tidak langsung memaksa kita untuk menjadi developer yang lebih disiplin dalam menerapkan prinsip prinsip clean code. Inilah alasan mengapa perusahaan teknologi besar selalu mewajibkan developer mereka untuk menulis test sebagai bagian dari proses pengembangan perangkat lunak.

Mengenal Framework xUnit Yang Keren

Di dunia C# sebenarnya ada beberapa framework pengujian yang populer seperti NUnit dan MSTest namun xUnit seringkali dianggap sebagai pilihan yang paling modern dan asik untuk digunakan. xUnit dikembangkan oleh orang orang yang sama dengan yang membuat NUnit namun mereka ingin memberikan pengalaman yang lebih bersih dan fleksibel bagi para developer. Framework ini sangat ringan serta memiliki integrasi yang sangat baik dengan ekosistem dotnet modern termasuk dotnet core dan versi terbaru dari dotnet yang kita gunakan sekarang.

Salah satu hal yang membuat xUnit terasa asik adalah kesederhanaannya dalam penggunaan atribut. Kita tidak perlu lagi menulis banyak konfigurasi yang ribet untuk memulai sebuah test case. Cukup tambahkan atribut di atas method pengujian kita dan xUnit akan mengenali serta menjalankannya dengan otomatis. Selain itu xUnit mendukung teknik data driven testing yang sangat powerful lewat fitur Theory yang memungkinkan kita menjalankan satu method test dengan berbagai macam input data sekaligus tanpa harus menulis ulang logika yang sama berulang kali.

Persiapan Lingkungan Kerja Dan Senjata Utama

Sebelum kita mulai menulis kode pengujian pertama kita perlu menyiapkan beberapa hal di dalam project C# kita. Hal yang paling umum dilakukan adalah dengan membuat project test yang terpisah dari project utama agar kode produksi dan kode pengujian tidak tercampur aduk. Kita bisa menggunakan Visual Studio atau Visual Studio Code untuk melakukan hal ini. Di dalam terminal kita cukup menjalankan perintah dotnet new xunit untuk membuat sebuah project baru yang sudah dilengkapi dengan semua library yang dibutuhkan oleh xUnit.

Setelah project test berhasil dibuat langkah selanjutnya adalah menambahkan referensi ke project utama yang ingin kita tes. Ini sangat penting supaya project test kita bisa mengenali kelas kelas dan fungsi fungsi yang sudah kita buat sebelumnya. Pastikan juga semua library pendukung sudah terinstall dengan versi yang kompatibel agar tidak ada kendala teknis saat proses kompilasi berjalan. Setelah semuanya siap barulah kita bisa mulai merasakan asiknya menulis baris demi baris test case yang akan menjaga kualitas aplikasi kita.

Dalam dunia xUnit atribut yang paling dasar dan sering digunakan adalah Fact. Atribut ini menandakan bahwa method tersebut adalah sebuah pengujian yang selalu bernilai benar tanpa memerlukan parameter tambahan. Mari kita bayangkan kita punya sebuah kelas sederhana bernama Calculator yang memiliki fungsi untuk menjumlahkan dua buah angka. Kita ingin memastikan bahwa fungsi tambah tersebut benar benar memberikan hasil yang sesuai dengan logika matematika dasar.

Langkah pertama yang kita lakukan adalah membuat sebuah kelas test baru kemudian di dalamnya kita buat sebuah method dengan atribut Fact di atasnya. Di dalam method tersebut kita akan menerapkan pola yang sangat populer di kalangan developer yaitu pola AAA yang merupakan singkatan dari Arrange Act dan Assert. Pola ini sangat membantu kita dalam menyusun struktur kode test agar lebih mudah dibaca dan dipahami oleh orang lain atau bahkan oleh diri kita sendiri di masa depan.

Memahami Pola AAA Yang Sangat Powerfull

Mari kita bedah satu per satu bagian dari pola AAA ini agar kita semakin paham cara kerjanya. Bagian pertama adalah Arrange yang merupakan tempat di mana kita menyiapkan semua keperluan untuk pengujian. Di sini kita membuat instance dari kelas yang akan dites kemudian menyiapkan data input yang dibutuhkan. Bagian kedua adalah Act yaitu saat kita memanggil fungsi atau method yang ingin kita uji dan menyimpan hasilnya ke dalam sebuah variabel. Bagian terakhir yang paling krusial adalah Assert yang berfungsi untuk membandingkan hasil yang didapat dari tahap Act dengan hasil yang kita harapkan.

Jika nilai yang didapat sama dengan ekspektasi kita maka test tersebut akan dianggap lolos atau pass yang biasanya ditandai dengan centang hijau yang sangat memuaskan di test explorer. Namun jika hasilnya berbeda maka xUnit akan memberikan laporan kegagalan yang detail mengenai apa yang salah. Proses ini sangat membantu kita dalam mendeteksi kesalahan logika sejak dini bahkan sebelum aplikasi tersebut dijalankan oleh user. Dengan mengikuti pola AAA secara konsisten kode test kita akan terlihat lebih profesional dan terorganisir dengan sangat baik.

Menggunakan Theory Untuk Skenario Data Yang Banyak

Terkadang kita perlu mengetes sebuah fungsi dengan berbagai macam input yang berbeda untuk memastikan tidak ada kasus ekstrem atau edge case yang membuat aplikasi kita crash. Kalau kita menggunakan Fact kita mungkin harus menulis banyak method yang hampir sama hanya berbeda nilainya saja. Hal ini tentu tidak efisien dan membosankan. Nah xUnit punya solusi cerdas untuk masalah ini yaitu dengan menggunakan atribut Theory yang dikombinasikan dengan InlineData.

Dengan menggunakan Theory kita bisa mengirimkan berbagai macam parameter langsung ke dalam method test kita. Setiap baris InlineData yang kita tulis akan dianggap sebagai satu kasus pengujian yang berdiri sendiri. Bayangkan betapa asik nya kita bisa mengetes fungsi validasi email dengan puluhan format email yang berbeda hanya dalam satu method saja. Ini akan membuat kode test kita jauh lebih ringkas namun tetap memiliki cakupan pengujian yang sangat luas. Kita jadi lebih percaya diri bahwa fungsi yang kita buat sudah benar benar tahan banting menghadapi berbagai macam kemungkinan input dari user yang terkadang aneh aneh.

Tips Menjaga Kualitas Kode Test Agar Tetap Bersih

Menulis unit test bukan berarti kita bisa menulis kode seadanya saja. Kode pengujian juga harus dijaga kualitasnya layaknya kode produksi. Salah satu tips penting adalah memberikan nama method test yang deskriptif sehingga siapapun yang melihatnya langsung paham apa yang sedang diuji tanpa harus membaca isinya. Nama yang baik biasanya menjelaskan perilaku yang diharapkan dan kondisi apa yang sedang diberikan. Jangan pelit dengan kata kata saat memberi nama method test karena kejelasan adalah kunci utama dalam dokumentasi kode.

Selain itu usahakan agar setiap unit test hanya fokus pada satu hal spesifik saja. Jangan mencampur adukkan terlalu banyak logika pengujian dalam satu method karena hal itu akan menyulitkan kita saat mencari penyebab kegagalan test tersebut. Unit test yang baik harus bersifat independen dan tidak boleh bergantung pada urutan eksekusi atau hasil dari test yang lain. Setiap kali test dijalankan ia harus memulai dari keadaan yang bersih agar hasilnya tetap konsisten dan tidak menimbulkan kebingungan di kemudian hari.

Menghadapi Dependency Dengan Teknik Mocking

Dalam aplikasi nyata sebuah kelas seringkali memiliki ketergantungan atau dependency dengan kelas lain seperti database atau layanan web external. Melakukan unit test pada kelas seperti ini bisa menjadi tantangan tersendiri karena kita tidak ingin test kita benar benar mengakses database asli atau mengirim email beneran saat sedang dijalankan. Di sinilah kita perlu menggunakan teknik mocking untuk membuat tiruan dari dependency tersebut sehingga kita bisa mengontrol perilakunya sesuai keinginan kita.

Ada banyak library mocking yang asik digunakan di ekosistem C# seperti Moq atau NSubstitute. Dengan menggunakan library tersebut kita bisa mensimulasikan hasil dari sebuah pemanggilan database tanpa perlu ada database beneran yang berjalan. Hal ini membuat unit test kita tetap berjalan dengan sangat cepat dan terisolasi dari gangguan faktor eksternal. Kemampuan untuk melakukan isolasi ini sangat penting karena inti dari unit testing adalah menguji unit terkecil dari kode kita bukan menguji keseluruhan sistem secara bersamaan.

Menjadikan Unit Testing Sebagai Budaya Kerja

Hal yang paling sulit sebenarnya bukan belajar sintaks xUnit melainkan membangun kebiasaan untuk selalu menulis test di setiap fitur baru yang kita kembangkan. Kita harus mulai menganggap bahwa sebuah fitur belum benar benar selesai sebelum unit testnya tersedia dan berjalan dengan lancar. Kalau kita sudah terbiasa dengan pola pikir seperti ini kita akan merasakan betapa asiknya proses development yang stabil dan minim drama bug yang muncul tiba tiba di hari libur.

Kita juga bisa mengintegrasikan proses pengujian ini ke dalam sistem Continuous Integration agar setiap kali ada kode yang diunggah ke repositori sistem akan secara otomatis menjalankan semua unit test yang ada. Jika ada test yang gagal maka kode tersebut tidak akan bisa digabungkan ke cabang utama. Ini adalah cara yang sangat efektif untuk menjaga kualitas kode di dalam tim besar dan memastikan bahwa standar kualitas tetap terjaga dengan baik tanpa harus ada pengawasan manual yang melelahkan setiap saat.

Penutup Yang Memberi Semangat

Belajar unit testing dengan xUnit memang butuh waktu dan dedikasi tapi hasil yang akan kita petik di kemudian hari sangatlah manis. Kita akan menjadi developer yang lebih kompeten dan dipercaya karena aplikasi yang kita hasilkan memiliki standar kualitas yang tinggi. Jangan pernah merasa bosan untuk terus bereksperimen dan mencoba berbagai fitur canggih yang ditawarkan oleh xUnit karena dunia teknologi selalu berkembang dengan cepat.

Ingatlah bahwa setiap bug yang berhasil kita tangkap lewat unit testing adalah satu masalah yang tidak perlu dialami oleh user kita. Jadi mari kita terus semangat membangun aplikasi C# yang bebas bug dan asik untuk digunakan oleh semua orang. Semoga panduan singkat ini bisa menjadi langkah awal yang baik buat kita semua dalam mendalami dunia testing yang sangat seru ini. Selamat mencoba dan selamat berkarya dengan kode kode hebat kita semua.

Read more