Penerapan Design Pattern Arsitektur MVP pada Aplikasi EDC (Part II: Positive & Negative Unit Testing and Mocking)

by Andika Wasisto

PPL A2
2 min readJun 4, 2018

Pada post https://medium.com/@pplA2EDC/penerapan-design-pattern-arsitektur-mvp-pada-aplikasi-edc-4aaccb0135f0, kita telah membahas penerapan arsitektur MVP pada user story “EDC menerima tugas yang diberikan”. Seperti yang dijanjikan sebelumnya kali ini, kita akan membahas unit testing dari user story tersebut tersebut menggunakan teknik mocking seperti yang telah kita bahas pada post https://medium.com/@pplA2EDC/advanced-unit-test-business-logic-asynchronous-di-aplikasi-android-berarsitektur-mvp-63316580f07.

Mengapa harus melakukan mocking?

Sebuah presenter membutuhkan objek Model dan View untuk bekerja. View pada aplikasi Android tidak dapat diinstansiasi saat melakukan unit testing karena tidak ada perangkat yang aktif untuk membuat View tersebut. Begitu pula dengan Model. Jika kita mengakses Model yang sebenarnya, maka database akan benar-benar diakses dan diubah saat melakukan unit testing. Hal ini tentu saja tidak ingin kita lakukan. Karena itu, kita perlu menggunakan teknik mocking dimana kita membuat objek View dan Model “palsu” untuk melakukan unit testing Presenter.

Penerapan mocking

Pada pembahasan ini, kita akan menggunakan library Mockito untuk melakukan mocking. Untuk cara pemasangan library tersebut, silahkan kunjungi http://site.mockito.org/.

Dibawah ini adalah kode unit testing untuk user story “EDC menerima tugas yang diberikan”

Pada kode unit testing di atas, mocking dilakukan pada objek EdcTaskDataSource, LocationManager, dan NewTaskContract.View. Lalu objek-objek mock tersebut digunakan untuk menginstansiasi Presenter yang ingin kita lakukan unit test pada method accept().

Meningkatkan kualitas software dan code coverage dengan melakukan negative testing

Agar kualitas software dan code coverage maksimal, tidak hanya kasus normal yang perlu dilakukan unit testing. Kasus error juga perlu dilakukan unit testing. Error dapat terjadi karena input pengguna yang tidak valid atau kesalahan internal.

Melakukan negative testing tidak jauh berbeda dari positive testing. Perubahan yang perlu diadakan dari positive testing hanya sedikit. Berikut adalah contoh testing kasus error yang disebabkan karena gagalnya mengubah database pada user story “EDC menerima tugas yang diberikan”

Perubahan hanya dilakukan pada objek Model yang telah di-mock yang sebelumnya objek tersebut memanggil method onSuccess() pada callback, sekarang kita ubah menjadi onError() untuk menyimulasikan terjadinya sebuah error.

Itulah teknik-teknik yang diterapkan untuk melakukan unit testing pada aplikasi EDC.

Happy coding!

--

--