So testen Sie die Navigation beim Verwenden von Jetpack -Kompose bei WearosAndroid

Forum für diejenigen, die für Android programmieren
Guest
 So testen Sie die Navigation beim Verwenden von Jetpack -Kompose bei Wearos

Post by Guest »

Ich möchte verbundene Android -Tests schreiben, die GUI -Verhaltensweisen und die ausgelösten Navigationen validieren. Zum Beispiel auf einem Bildschirm wischen, um ein Menü zu öffnen, navigiert () Anruf, um zu einem anderen Bildschirm zu gehen. , aber als ich eine neuere Version von Kotlin (2), Mockk und Jetpack komponiert habe, hat dies nicht mehr funktioniert. TestNavHostController, aber in der Praxis hat dies bei mir nicht funktioniert.

Code: Select all

junit = "4.13.2"
kotlin = "2.0.21"
mockk = "1.13.13"
robolectric = "4.13"
navigation-compose = "2.8.4"

< /code>
Wenn ich versuche, das Mockk zu verwenden: < /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>
Dann erhalte ich einen Fehler, dass ich keinen Proxy für die Klasse navhostcontroller instanziieren kann: < /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>
Und wenn ich versuche, testNavHostController zu verwenden: < /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>
Ich erhalte einen Fehler, den testNavigatorProvider nicht zum Wearnavigator gegossen werden kann: < /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)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post