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

#android #unit-testing #mockito #android-architecture-components

#Android #модульное тестирование #mockito #android-архитектура-компоненты

Вопрос:

У меня есть 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 не может издеваться над этим классом: класс android.app.Application.

Mockito может имитировать только непубличные и не финальные классы.

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

Редактировать:

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

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

Комментарии:

1. Вы пытаетесь издеваться над классом приложения в androidTest, что не имеет особого смысла, поскольку вы можете получить фактический экземпляр приложения

2. @lelloman не уверен, что вы имеете в виду, я думал, что androidTest предназначен для того, чтобы, когда вам нужно работать с фреймворком Android, ViewModel использует некоторые общие настройки. Я очень новичок в модульном тестировании в Android, поэтому я не все понимаю полностью, но могу ли я выполнить эти тесты в test папке?

3. Если вы действительно тестируете модульное тестирование модели представления, вы должны иметь возможность делать это в test папке, вам нужно будет смоделировать все зависимости Android (например Application , или SharedPreferences ), вместо тестов в androidTest папке доступно ваше фактическое приложение. Вы должны иметь возможность просматривать модели модульного тестирования test , они намного быстрее, чем androidTest .

Ответ №1:

Mockito.mock(Application::class.java)

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

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

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

Издеваться над отключаемым: выбор в издевательстве над конечными классами / методами

Комментарии:

1. Мне пришлось обновить свою версию mockito, и она начала работать