Как издеваться над классом приложения для модульного тестирования ViewModel

У меня View Model, который расширяет AndroidViewModel

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

И я хочу провести модульное тестирование, но не могу понять, как издеваться над классом приложения.

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

        .....
    }

Но когда я иду запустить тест, я получаю сообщение об ошибке, которое Mockito не может высмеять Application

org.mockito.exceptions.base.MockitoException: Mockito не может издеваться над этим классом: class android.app.Application.

Mockito может издеваться только над не закрытыми и не финальными классами.

Как издеваться над классом приложения, чтобы передать его моей модели представления?

Изменить:

Вот моя иерархия папок, предложенная @farhanjk

введите описание изображения здесь


person tyczj    schedule 09.04.2019    source источник
comment
Вы пытаетесь издеваться над классом Application в AndroidTest, что не имеет особого смысла, поскольку вы можете получить фактический экземпляр Application   -  person lelloman    schedule 10.04.2019
comment
@lelloman не уверен, что вы имеете в виду, я думал, что androidTest предназначен для случаев, когда вам нужно работать с фреймворком Android, ViewModel использует некоторые общие настройки. Я новичок в модульном тестировании в Android, поэтому я не понимаю всего, но могу ли я выполнить эти тесты в папке test?   -  person tyczj    schedule 10.04.2019
comment
Если вы действительно проводите модульное тестирование модели представления, вы должны иметь возможность сделать это в папке test, вам нужно будет имитировать все зависимости Android (например, Application или SharedPreferences), тесты в папке androidTest вместо этого будут иметь ваше фактическое приложение. Вы должны иметь возможность тестировать модели представления в test, они намного быстрее, чем androidTest.   -  person lelloman    schedule 10.04.2019


Ответы (1)


Mockito.mock(Application::class.java)

В папке test создайте иерархию, подобную следующей:

введите описание изображения здесь

В файле org.mockito.plugins.MockMaker просто поместите однострочный текст mock-maker-inline.

Имитируйте непреодолимое: включите имитацию окончательных классов / методов

person farhanjk    schedule 09.04.2019
comment
Мне пришлось обновить мою версию mockito, и она начала работать - person tyczj; 10.04.2019