Я хочу написать подключенные тесты Android, которые проверяют поведение графического интерфейса и запускаемую навигацию. Например, проведя пальцем по одному экрану, чтобы открыть меню, которое представляет собой вызов Navigation() для перехода на другой экран.
Раньше я использовал библиотеку Mockk, чтобы имитировать NavHostController. , но когда я обновился до более последней версии Kotlin (2),ockk и Jetpack Compose, это больше не работало.
В документации Android указано, что следует использовать TestNavHostController, но на практике у меня это не сработало.
Соответствующие версии библиотеки:
junit = "4.13.2"
kotlin = "2.0.21"
mockk = "1.13.13"
robolectric = "4.13"
navigation-compose = "2.8.4"
Если я попробую использовать макет:
@MockK
lateinit var navHostController: NavHostController
@Before
fun setupTest() {
navHostController = mockk(relaxed = true)
}
@Test
fun `test with navhost`() {
composeTestRule.setContent {
MyLog(navHostController = navHostController, viewModel = myViewModel)
}
}
После этого я получаю сообщение об ошибке, что не могу создать экземпляр прокси для класса NavHostController:
com.example.display.presentation.components.MyLogTest > tapping a card calls onInitiate[Wear_OS_Large_Round_API_34(AVD) - 14] FAILED
io.mockk.MockKException: Can't instantiate proxy for class androidx.navigation.NavHostController
at io.mockk.impl.instantiation.JvmMockFactory.newProxy(JvmMockFactory.kt:64)
А если я попробую использовать TestNavHostController:
val navHostController = TestNavHostController(
ApplicationProvider.getApplicationContext(),
)
navHostController.createGraph(startDestination = Screen.MainScreen) {
composable(Screen.MainScreen.route) {
MainScreen(navHostController = navHostController)
}
composable(Screen.MainMenu.route) {
MainMenu(navHostController)
}
}
composeTestRule.setContent {
navHostController.navigatorProvider.addNavigator(ComposeNavigator())
MainScreen(myViewModel, navHostController)
}
mainscreen.performTouchInput { swipeLeft(startX = 300f, endX = 100f) }
assertEquals(Screen.MainMenu.route, navHostController.currentDestination?.route)
Я получаю сообщение об ошибке, что TestNavigatorProvider невозможно привести к WearNavigator:
com.example.display.presentation.components.MainScreenTest > when user swipes left it opens the main menu[Wear_OS_Large_Round_API_34(AVD) - 14] FAILED
java.lang.ClassCastException: androidx.navigation.testing.TestNavigatorProvider$navigator$1 cannot be cast to androidx.wear.compose.navigation.WearNavigator
at androidx.wear.compose.navigation.NavGraphBuilderKt.composable(NavGraphBuilder.kt:55)
Подробнее здесь: https://stackoverflow.com/questions/792 ... -on-wearos
Как протестировать навигацию при использовании Jetpack Compose на WearOS ⇐ Android
Форум для тех, кто программирует под Android
1732312932
Anonymous
Я хочу написать подключенные тесты Android, которые проверяют поведение графического интерфейса и запускаемую навигацию. Например, проведя пальцем по одному экрану, чтобы открыть меню, которое представляет собой вызов Navigation() для перехода на другой экран.
Раньше я использовал библиотеку Mockk, чтобы имитировать NavHostController. , но когда я обновился до более последней версии Kotlin (2),ockk и Jetpack Compose, это больше не работало.
В документации Android указано, что следует использовать TestNavHostController, но на практике у меня это не сработало.
Соответствующие версии библиотеки:
junit = "4.13.2"
kotlin = "2.0.21"
mockk = "1.13.13"
robolectric = "4.13"
navigation-compose = "2.8.4"
Если я попробую использовать макет:
@MockK
lateinit var navHostController: NavHostController
@Before
fun setupTest() {
navHostController = mockk(relaxed = true)
}
@Test
fun `test with navhost`() {
composeTestRule.setContent {
MyLog(navHostController = navHostController, viewModel = myViewModel)
}
}
После этого я получаю сообщение об ошибке, что не могу создать экземпляр прокси для класса NavHostController:
com.example.display.presentation.components.MyLogTest > tapping a card calls onInitiate[Wear_OS_Large_Round_API_34(AVD) - 14] FAILED
io.mockk.MockKException: Can't instantiate proxy for class androidx.navigation.NavHostController
at io.mockk.impl.instantiation.JvmMockFactory.newProxy(JvmMockFactory.kt:64)
А если я попробую использовать TestNavHostController:
val navHostController = TestNavHostController(
ApplicationProvider.getApplicationContext(),
)
navHostController.createGraph(startDestination = Screen.MainScreen) {
composable(Screen.MainScreen.route) {
MainScreen(navHostController = navHostController)
}
composable(Screen.MainMenu.route) {
MainMenu(navHostController)
}
}
composeTestRule.setContent {
navHostController.navigatorProvider.addNavigator(ComposeNavigator())
MainScreen(myViewModel, navHostController)
}
mainscreen.performTouchInput { swipeLeft(startX = 300f, endX = 100f) }
assertEquals(Screen.MainMenu.route, navHostController.currentDestination?.route)
Я получаю сообщение об ошибке, что TestNavigatorProvider невозможно привести к WearNavigator:
com.example.display.presentation.components.MainScreenTest > when user swipes left it opens the main menu[Wear_OS_Large_Round_API_34(AVD) - 14] FAILED
java.lang.ClassCastException: androidx.navigation.testing.TestNavigatorProvider$navigator$1 cannot be cast to androidx.wear.compose.navigation.WearNavigator
at androidx.wear.compose.navigation.NavGraphBuilderKt.composable(NavGraphBuilder.kt:55)
Подробнее здесь: [url]https://stackoverflow.com/questions/79216700/how-to-test-navigation-when-using-jetpack-compose-on-wearos[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия