#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, и она начала работать