Как проверить навигацию при использовании JetPack Compose на ForoSAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как проверить навигацию при использовании JetPack Compose на ForoS

Сообщение Anonymous »

Я хочу написать подключенные тесты Android, которые подтверждают поведение GUI и навигации, которые запускаются. Например, проведите один экран, чтобы открыть меню, которое представляет собой вызов nevigate () , чтобы перейти на другой экран. , но когда я обновился до более недавней версии Kotlin (2), Mockk и Jetpack Compose, это больше не работало. Testnavhostcontroller, но на практике это не сработало для меня. < /P>
соответствующие библиотечные версии: < /p>
junit = "4.13.2"
kotlin = "2.0.21"
mockk = "1.13.13"
robolectric = "4.13"
navigation-compose = "2.8.4"

< /code>
Если я попробую использовать Mockk: < /p>
@MockK
lateinit var navHostController: NavHostController

@Before
fun setupTest() {
navHostController = mockk(relaxed = true)
}

@Test
fun `test with navhost`() {
composeTestRule.setContent {
MyLog(navHostController = navHostController, viewModel = myViewModel)
}
}

< /code>
Тогда я получаю ошибку, которая не могу создать прокси для класса NavhostController: < /p>
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)
< /code>
И если я попробую использовать testnavhostcontroller: < /p>
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)

< /code>
Я получаю ошибку, которую TestNavigatorProvider не может быть поднят в WearNavigator: < /p>
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»