Software Testing, Development, Quality Assurance - Nafhan Raissa Syandana
Software Methodology: TDD - Nafhan Raissa Syandana
Test Driven Development merupakan pendekatan software development di mana automated testing dibuat sebelum kode fungsionalnya. Sehingga dilakukan dengan menulis unit tests terlebih dahulu sebelum menulis actual code lalu kemudian mengimplementasikan kode untuk memenuhi test requirements. Pendekatan tersebut untuk memastikan bahwa kode yang dibuat memiliki test coverage yang baik dan sesuai dengan spesifikasi yang telah ditetapkan.
Pada fitur edit profil yang telah saya buat, dapat kita lihat penerapan TDD melalui unit tests yang telah dibuat pada
ProfileEditAPIView(TestCase) pada tests.py. Berikut merupakan detail-nya terkait bagaimana TDD diterapkan:
Di awal saya melakukan setUp terlebih dahulu untuk membuat profile untuk user sekaligus generate token untuk autentikasi.
- Test Pertama: ‘test_edit_profile_success’
Tes ini bertujuan untuk memastikan bahwa profil pengguna dapat diedit dengan sukses. Tahap pertama pada TDD adalah menulis tes yang gagal. Kita membuat skenario ideal di mana pengguna dapat mengubah profil dengan benar, sehingga jika kode belum ada, tes ini pasti akan gagal.
- Test Kedua: ‘test_edit_profile_unauthenticated’
Tes ini menguji kasus di mana pengguna tidak terautentikasi. Pada prinsip TDD kita menulis tes terlebih dahulu untuk skenario yang diharapkan terjadi. Tes ini menunjukkan bahwa jika pengguna tidak terautentikasi maka permintaan edit profil akan menghasilkan respon status 401 Unauthorized. Kita perlu memastikan bahwa API memeriksa kredensial pengguna sebelum mengizinkan akses ke fitur edit profil.
- Test Ketiga dan Keempat: ‘test_edit_profile_invalid_nik’ dan ‘test_edit_profile_invalid_no_wa’
Tes ini menguji validasi input untuk kolom 'nik' dan 'no_wa'. Saya membuat tes untuk skenario dimana input yang tidak valid diberikan dan memastikan bahwa aplikasi berperilaku sesuai dengan yang diharapkan.
Test ini menunjukkan bahwa jika input tidak valid diberikan (misalnya, 'nik' atau 'no_wa' bukan angka) maka API harus mengembalikan respons status 400 Bad Request dengan pesan yang sesuai. Sehingga pada kode kita memeriksa apakah nilai 'nik' atau 'no_wa' merupakan angka dalam format yang benar sebelum menyimpan perubahan profil pengguna.
- Equivalency Class:
Equivalency class testing merupakan testing techniques dimana input atau test conditions dibagi menjadi kelas yang setara. Pada fitur edit profil dapat kita identifikasi beberapa equivalent class untuk testing, seperti:
Kelas setara untuk data yang valid misalnya, data yang valid untuk 'nik' atau 'no_wa' adalah angka. Kelas setara untuk data yang tidak valid misalnya, data yang tidak valid untuk 'nik' atau 'no_wa' adalah bukan angka.
Dalam kode saya memastikan bahwa testing dilakukan untuk setiap equivalent class ini untuk memastikan aplikasi berperilaku dengan benar terhadap berbagai jenis input.
Dalam kedua tes di atas kita menguji equivalent case untuk data yang valid (angka) dan data yang tidak valid (non-angka) untuk atribut 'nik' dan 'no_wa'. Hal ini memastikan bahwa aplikasi berperilaku sesuai harapan terhadap berbagai jenis input yang mungkin diterima.
‘@testing-library/react’ digunakan untuk merender komponen dan memanipulasi DOM.
‘EditProfilePage’ sendiri merupakan komponen yang sedang diuji.
‘@testing-library/jest-dom’ digunakan untuk matcher khusus jest yang memudahkan assert pada DOM.
Rendering dan Validasi Elemen DOM:
- Memastikan halaman dan elemen-elemen tertentu dirender dengan benar menggunakan 'render' dan 'screen' dari '@testing-library/react'.
- Melakukan validasi terhadap teks yang muncul di halaman dengan elemen-elemen yang seharusnya ada (misalnya, nama, email, alamat, dan lain-lain).
Simulasi User Interaction:
- Menggunakan 'fireEvent' untuk mensimulasikan perubahan pada input dan klik pada tombol.
- Memastikan perubahan yang dimasukkan pengguna diterima dan dikirim melalui panggilan 'fetch'.
Mocking Dependensi:
- 'useRouter' dari 'next/router' di-mock untuk mengontrol navigasi.
- 'AuthProvider' di-mock untuk mengatur autentikasi pengguna.
- Panggilan 'fetch' di-mock untuk mengontrol respons API.
~ Back End:
Setup Data dan Autentikasi:
- Menggunakan 'setUp' untuk menyiapkan data awal seperti pengguna dan profilnya.
- Menggunakan 'JWTService' untuk membuat authentication token.
API Call Simulation:
- Menggunakan 'APIClient' dari 'rest_framework.test' untuk melakukan panggilan API.
- Menggunakan 'patch' untuk me-mock metode service yang berinteraksi dengan business logic.
Response Validation dan Code Status:
- Memeriksa response status code(misalnya '200 OK', '400 Bad Request', '401 Unauthorized', dll).
- Memeriksa isi dari respons untuk memastikan data yang dikembalikan sesuai dengan yang diharapkan.
Test untuk Rendering Halaman:
- Menguji apakah page ‘EditProfilePage’ di-render dengan benar dan menampilkan semua elemen yang diharapkan.
- Fokus pada rendering komponen UI serta tampilan elemen.
Test untuk Mengupdate Profil:
- Menguji apakah perubahan pada input pengguna dikirim dengan benar melalui panggilan ‘fetch’.
- Berfokus pada interaksi pengguna dengan interface dan pengiriman data menuju API.
Test untuk Service Layer:
- Menguji metode ‘get_profile_user’ yang bertujuan untuk memastikan data profil dikembalikan dengan benar serta menangani kesalahan dengan baik.
- Menguji berbagai skenario kesalahan (misalnya, tipe data yang salah, UUID yang tidak valid, pengguna tidak ditemukan, profil tidak ditemukan, dll).
Test untuk API Endpoint:
- Menguji endpoint edit profil dengan berbagai skenario seperti sukses, tidak terautentikasi, serta juga input yang tidak valid.
- Memeriksa apakah respons dan code status sesuai dengan yang diharapkan untuk setiap skenario.
> Desain Test Case:
Kesimpulan utamanya adalah pada Front end test case dirancang untuk memastikan bahwa UI berfungsi dengan baik dan dapat mengirim data yang benar menuju back end.
Kemudian pada Back end test case dirancang untuk memastikan bahwa business logic dan endpoint API bekerja dengan benar, lalu dapat menangani berbagai kondisi kesalahan, serta juga dapat memvalidasi data yang diterima dari front end.
Comments
Post a Comment