Как написать модульный тест пользовательского интерфейса для этих составных элементов в Android?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как написать модульный тест пользовательского интерфейса для этих составных элементов в Android?

Сообщение Anonymous »


Я хочу написать тестовые примеры пользовательского интерфейса для компоновки. Я много искал, но до сих пор не нашел подходящего решения. Мне нужно понять, как писать тестовые примеры в Android Kotlin. Я просматриваю ограниченное объяснение Google по тестированию пользовательского интерфейса в Android, но эти документы весьма ограничены в объяснениях, чтобы правильно их понять. Пожалуйста, помогите мне разобраться в этом
Вот мой составной класс

@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @OptIn(ExperimentalMaterial3Api::class) @ExperimentalCoilApi @Композитный забавный CatScreen( состояние: CatContract.State, effectFlow: Flow?, onNavigationRequested: (itemUrl: String, imageId: String,isFavourite:Boolean) -> Единица измерения ) { val SnackBarHostState = помните { SnackbarHostState() } контекст val = LocalContext.current val catMessage = stringResource(R.string.cats_are_loaded) //инициализация выбранного элемента по умолчанию var NavigationSelectedItem, запомнив { изменяемыйIntStateOf (0) } /** * с помощью RememberNavController() * мы можем получить экземпляр navController */ val navController = RememberNavController() // Прослушиваем побочные эффекты от виртуальной машины LaunchedEffect (effectFlow) { effectFlow?.onEach { эффект -> if (эффект BaseContract.Effect.DataWasLoaded) SnackBarHostState.showSnackbar( сообщение = catMessage, продолжительность = SnackbarDuration.Short ) }?.collect { значение -> if (значение BaseContract.Effect.Error) { // Обработка других выдаваемых значений, если необходимо Toast.makeText(context, value.errorMessage, Toast.LENGTH_LONG).show() } } } Строительные леса( топБар = { CatAppBar() }, дноБар = { Панель навигации { //получение списка нижних элементов навигации для нашего класса данных getBottomNavigationItems(context).forEachIndexed { index, NavigationItem -> //перебираем все элементы с соответствующими индексами НавигационныйБарItem( выбрано = индекс == NavigationSelectedItem, метка = { Текст(navigationItem.title) }, значок = { Икона( NavigationItem.значок, contentDescription = NavigationItem.title ) }, onClick = { NavigationSelectedItem = индекс navController.navigate(navigationItem.screenRoute) { popUpTo(navController.graph.findStartDestination().id) { saveState = правда } запускSingleTop = правда восстановлениестате = истина } } ) } } } ) {_paddingValues ​​-> //Здесь нам нужно настроить наш NavHost NavHost( navController = navController, startDestination = NavigationScreens.Home.screenRoute, модификатор = Modifier.padding(paddingValues ​​= paddingValues) ) { составной (NavigationScreens.Home.screenRoute) { Пользовательский просмотр( состояние, ЛОЖЬ, onNavigationRequested = onNavigationRequested ) } составной (NavigationScreens.MyFavorites.screenRoute) { Пользовательский просмотр( состояние, истинный, onNavigationRequested = onNavigationRequested ) } } } } @Композитный забавный UserView( состояние: CatContract.State, isFavCatsCall: логическое значение, onNavigationRequested: (itemUrl: String, imageId: String,isFavourite:Boolean) -> Единица ) { Поверхность { Коробка { val Cats = if (isFavCatsCall) state.favCatsList else state.cats CatsList(cats = кошки) { itemUrl, imageId -> onNavigationRequested (itemUrl, imageId, isFavCatsCall) } если (state.isLoading) ЗагрузкаБар() } } } @OptIn(ExperimentalMaterial3Api::class) @Композитный частное развлечение CatAppBar() { ТопAppBar( NavigationIcon = { Икона( imageVector = Icons.Default.Home, модификатор = Modifier.padding(горизонтальный = 12.dp), contentDescription = stringResource(R.string.action_icon) ) }, заголовок = { Текст( текст = stringResource(R.string.app_name), цвет = colorResource(id = R.color.white) ) }, цвета = TopAppBarDefaults.smallTopAppBarColors( контейнерЦвет = цветРесурс(R.color.colorPrimary), titleContentColor = Цвет(R.color.white), NavigationIconContentColor = MaterialTheme.colorScheme.onPrimary, actionIconContentColor = MaterialTheme.colorScheme.onSecondary ) ) } @Композитный забавный список кошек( кошки: List, onItemClicked: (url: String, imageId: String) -> Unit = { _: String, _: String -> } ) { LazyVerticalStaggeredGrid( столбцы = StaggeredGridCells.Fixed(2), HorizontalArrangement = Arrangement.spacedBy(2.dp), содержание = { this.items(cats) { элемент -> Карта( форма = RoundedCornerShape(8.dp), цвета = CardDefaults.cardColors( ContainerColor = MaterialTheme.colorScheme.surface, ), повышение = CardDefaults.cardElevation( defaultElevation = 6.dp ), граница = BorderStroke(0.5.dp, Color.Gray), модификатор = Модификатор .fillMaxWidth() .padding(начало = 10.dp, конец = 10.dp, верх = 10.dp) .clickable { onItemClicked(item.url, item.imageId) } ) { ItemThumbnail(thumbnailUrl = item.url) } } }, модификатор = Modifier.fillMaxSize() ) } @Композитный Миниатюра забавного предмета( ThumbnailUrl: строка ) { Скольжение изображения( imageModel = миниатюраUrl, модификатор = Модификатор .wrapContentSize() .wrapContentHeight() .fillMaxWidth(), // показывает индикатор прогресса при загрузке изображения. contentScale = ContentScale.Crop, CircularReveal = CircularReveal (длительность = 100), shimmerParams = ShimmerParams( baseColor = MaterialTheme.colorScheme.background, подсветкаЦвет = Цвет.Серый, продолжительностьМиллис = 500, падениеВыкл = 0,55f, наклон = 20f ), contentDescription = stringResource(R.string.cat_thumbnail_picture) ) } @Композитный весело LoadingBar() { Box( модификатор = Modifier.fillMaxSize(), contentAlignment = Выравнивание.Центр ) { CircularProgressIndicator(модификатор = Modifier.testTag(PROGRESS_BAR)) } } @OptIn(ExperimentalCoilApi::class) @Preview(showBackground = true) @Композитный весело DefaultPreview() { ComposeSampleTheme { CatScreen(CatContract.State(), null) { _: String, _: String,_:Boolean-> } } } Пожалуйста, помогите мне понять, как писать тестовые примеры для этих составных объектов. Заранее благодарим вас и будем очень признательны за ваши усилия.
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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