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.
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)
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]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) [/code]
Es fällt mir eine schrecklich schwere Zeit, die Farbe (n) der ausgewählten/nicht ausgewählten Symbole und den aktiven Indikator zu ändern. Die Dokumente haben keine Beispiele oder ordnungsgemäße...
Wie kann ich mit der Gamepad -Taste in meinem Jetpack -App -UI -UI -Taste mit der Taste des Jetpacks handhaben? Argument, aber es ist eher ein Hit oder ein Miss. Gibt es eine bessere Möglichkeit,...
Ich habe eine C# WinForms -Anwendung, die den WebView2 -Browser verwendet. Das Formular enthält ein Netz und eine Browseransicht. Wenn ein Benutzer die ausgewählte Zeile im Raster ändert, werden neue...
Ich habe Probleme, den Emit auf der komponierbaren Seite meines Projekts aus dem ViewModel zu fangen
ViewModel -Seite:
@HiltViewModel
class NavigationManager @Inject constructor() : ViewModel()...