Cara mengejek kelas Aplikasi untuk menguji unit ViewModel

Saya memiliki View Model yang memanjang AndroidViewModel

class MoveViewModel(application: Application): AndroidViewModel(application),CoroutineScope{
    ....
}

Dan saya ingin menguji unitnya tetapi saya tidak tahu cara mengejek kelas Aplikasi

@Test
    fun testSearchDataValidation() {
        val application = Mockito.mock(Application::class.java)
        val viewModel = MoveViewModel(application)

        .....
    }

Tetapi ketika saya menjalankan tes saya mendapatkan kesalahan yang Mockito tidak dapat ditiru Application

org.mockito.Exceptions.base.MockitoException: Mockito tidak dapat mengejek kelas ini: kelas Android.app.Application.

Mockito hanya dapat mengejek kelas non-privat & non-final.

Bagaimana cara saya meniru kelas Aplikasi untuk meneruskannya ke model tampilan saya?

Sunting:

Berikut hierarki folder saya seperti yang disarankan oleh @farhanjk

masukkan deskripsi gambar di sini


person tyczj    schedule 09.04.2019    source sumber
comment
Anda mencoba meniru kelas Aplikasi di AndroidTest, itu tidak masuk akal karena Anda bisa mendapatkan instance Aplikasi yang sebenarnya   -  person lelloman    schedule 10.04.2019
comment
@lelloman tidak yakin apa yang Anda maksud, saya pikir androidTest adalah untuk saat Anda perlu bekerja dengan kerangka kerja Android, ViewModel menggunakan beberapa preferensi bersama. Saya sangat baru dalam pengujian unit di Android jadi saya tidak memahami semuanya sepenuhnya tetapi bisakah saya melakukan tes ini di folder test?   -  person tyczj    schedule 10.04.2019
comment
Jika Anda benar-benar menguji unit model tampilan, Anda seharusnya dapat melakukannya di folder test, Anda perlu meniru semua dependensi Android (seperti Application atau SharedPreferences), pengujian di folder androidTest malah menyediakan aplikasi Anda yang sebenarnya. Anda seharusnya dapat menguji model tampilan unit di test, model tersebut jauh lebih cepat daripada androidTest.   -  person lelloman    schedule 10.04.2019


Jawaban (1)


Mockito.mock(Application::class.java)

Di folder test Anda, buat hierarki seperti berikut:

masukkan deskripsi gambar di sini

Di file org.mockito.plugins.MockMaker, cukup masukkan teks satu baris mock-maker-inline.

Mengejek yang tidak bisa di-mockito: ikut serta dalam mengejek kelas/metode akhir

person farhanjk    schedule 09.04.2019
comment
Saya harus memperbarui versi mockito saya dan itu mulai berfungsi - person tyczj; 10.04.2019