oke, satu tantangan yang tersisa adalah bagaimana kita harus menangani DI ketika kita melakukan TDD?

Apakah itu benar-benar sebuah tantangan atau bagaimana? baiklah saat kita menguji Fragmen/Aktivitas, kita mungkin tidak memiliki akses ke sumber data karena keduanya adalah Retrofit dan Room dan…, kita dapat memiliki ruang di memori tetapi bagaimana dengan layanan web?

seperti yang saya tahu kita dapat memiliki pendekatan berbeda untuk menangani masalah ini:

  1. menggunakan Layanan Web Mock untuk mensimulasikan koneksi jaringan dan meneruskan retrofit yang tepat
  2. hapus instalan Reposotry atau UseCase DI dan Instal Repositori palsu ke fragmen/aktivitas Anda

Saya ingin melakukan pendekatan kedua, bayangkan Anda memiliki desain ini:

untuk pengujian UI kita tidak boleh terhubung ke API asli dan kita harus memalsukan satu bagian dari kode kita tetapi bagian mana yang lebih baik? Menurut saya pilihan terbaik adalah Repositori sehingga kita dapat memiliki:

tapi dimana masalahnya? masalahnya adalah Anda mungkin telah menggunakan DI dan dalam hal ini Hilt, jadi Anda menyetel injeksi untuk UseCase Anda untuk menyuntikkan Repositori dan jika Anda membangun aplikasi pada arsitektur yang tepat, Anda harus memiliki antarmuka untuk repositori Anda dan meneruskannya ke UseCase alih-alih implantasi repositori tersebut (berdasarkan prinsip SOLID) dan saat Anda mencoba membuat pengujian UI, Hilt akan memasukkan implementasi Anda ke UseCase alih-alih FakeRepository, Anda harus menghapus instalasi DI spesifik tersebut dan membuat DI lain tetapi bagaimana caranya?

mari kita periksa dulu perpustakaan apa yang kita butuhkan:

oke mari kita lihat kodenya dan saya akan menjelaskan sisanya :

pertama, pikirkan bahwa kita memiliki modul untuk menyediakan kasus penggunaan seperti ini:

masalah kita adalah ketika kita menjalankan pengujian UI, kita tidak memiliki Internet dan semua objek harusnya palsu atau diolok-olok atau apa pun! jadi kita memerlukan repositori yang tepat, untuk kasus ini jika Anda menggunakan clean-arch untuk proyek Anda, Anda harus memiliki kelas SomeRepository dan kelas SomeRepositoryImp dan kami tidak ingin SomeRepositoryImp dalam pengujian UI kami, sebagai gantinya kami memerlukan SomeRepositoryFake ! jadi entah bagaimana kita perlu mengganti SomeUseCaseModule, di folder pengujian kita bisa melakukan hal-hal seperti ini:

sangat sederhana! pada kode ini yang ada di folder pengujian kami, kami mengganti modul SomeUseCase kami dengan versi baru (saya melakukan ini tetapi Anda juga dapat mengganti RepositoryModule Anda)

ada beberapa masalah lain juga, seperti yang Anda lihat, kami sedang dalam pengujian, bukan kode sebenarnya, jadi kami perlu mengubah grafik ketergantungan kami, kami memerlukan aktivitas lain dan aplikasi lain dan kami tidak ingin aktivitas atau aplikasi aktual kami

jadi pada langkah pertama, kita memerlukan Aktivitas lain, Anda dapat meletakkannya di folder debug atau folder pengujian (Saya telah melihat sebagian besar orang membuat folder debug di samping folder utama dan pengujian dan meletakkan kode ini di sana):

dan anda memerlukan manifes untuk aktivitas ini juga, seperti ini :

sekarang pikirkan tentang kita ingin menguji sebuah Fragmen, di pustaka android-test Anda dapat memiliki sesuatu yang bernama Skenario, Anda dapat menjalankan Skenario Aktivitas atau Skenario Fragmen tetapi pendekatan ini tidak akan berfungsi dengan gagangnya, kita perlu menyesuaikannya, sehingga kita dapat memiliki ekstensi seperti ini:

kode ini akan meluncurkan Skenario HiltAndroidActivityTest dan melampirkan sebuah fragmen ke dalamnya, ini adalah kode umum yang dapat Anda temukan di setiap artikel!

di sisi lain dan itu mengubah kelas Aplikasi Anda yang sebenarnya dengan HiltTestApplication yang disediakan oleh perpustakaan hilt, mari kita lihat tes UI:

di sini saya menggunakan Robolectric yang merupakan perpustakaan untuk pengujian UI, kelebihan perpustakaan ini adalah: Anda dapat meletakkan tes UI Anda di folder pengujian Anda alih-alih AndroidTest sehingga Anda tidak memerlukan perangkat atau emulator lagi, seperti yang Anda lihat I letakkan beberapa konfigurasi seperti versi SDK dan lain-lain tetapi yang penting adalah aplikasi itu, saya telah melewati jenis HiltTestApplication sehingga pengujian akan menghasilkan grafik ketergantungan lain, Anda juga perlu menambahkan HiltAndroidRule sebagai Aturan sehingga Hilt dapat memberikan ketergantungan Anda pada pengujian .

dan sekarang Anda dapat menguji fragmen Anda dan berbahagia :)

ada masalah =› hubungi saya: [email protected]