Komponieren Sie den UI -Test aus, der fehlschlägt, weil der Ablauf der Leerlaufressourcen festgelegt istAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Komponieren Sie den UI -Test aus, der fehlschlägt, weil der Ablauf der Leerlaufressourcen festgelegt ist

Post by Anonymous »

Ich habe den folgenden UI -Test komponieren: < /p>

Code: Select all

class PersonCardTest {
@get:Rule
val composeTestRule = createAndroidComposeRule()

@Test
fun personCardTest() {
with(composeTestRule) {
setContent {
PersonCard(
person =
Cast(
"role",
"name",
null,
Gender.MALE,
1,
)
)
}
onNodeWithContentDescription(
activity.getString(
R.string.person_content_description,
"name",
"role",
),
).assertIsDisplayed()
onNodeWithText("role").assertIsDisplayed()
onNodeWithText("name").assertIsDisplayed()
}
}
< /code>
} < /p>
Hier ist meine Personcard: < /p>
@Composable
fun PersonCard(
modifier: Modifier = Modifier,
person: Credit,
navController: NavController? = null,
) {
Column(
modifier
.padding(TMDb_4_dp)
.clickable {
navController?.navigate("${MainDestinations.TMDB_PERSON_ROUTE}/${person.id}")
},
horizontalAlignment = Alignment.CenterHorizontally,
) {
Card(
shape = CircleShape,
elevation = TMDb_8_dp,
modifier = Modifier.size(TMDb_120_dp),
) {
val request =
ImageRequest
.Builder(LocalContext.current)
.data(person.profileUrl)
.crossfade(true)
.transformations(CircleTopCropTransformation())
.build()
val placeholderPainter = rememberVectorPainter(person.gender.placeholderIcon)
val painter =
rememberAsyncImagePainter(
model = request,
error = placeholderPainter,
placeholder = placeholderPainter,
)
val colorFilter =
when (painter.state) {
is AsyncImagePainter.State.Error, is AsyncImagePainter.State.Loading ->
ColorFilter.tint(
MaterialTheme.colors.imageTint,
)

else ->  null
}
Image(
painter = painter,
colorFilter = colorFilter,
contentDescription =
stringResource(
id = R.string.person_content_description,
person.name,
person.role,
),
contentScale = ContentScale.FillHeight,
)
}
Text(
text = person.name,
style = MaterialTheme.typography.subtitle1.copy(fontWeight = FontWeight.SemiBold),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.padding(top = TMDb_4_dp),
)
Text(
text = person.role,
style =
MaterialTheme.typography.subtitle2.copy(
fontWeight = FontWeight.Normal,
fontStyle = FontStyle.Italic,
),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.padding(top = TMDb_2_dp),
)
}
}
It fails with following message :
androidx.compose.ui.test.junit4.android.ComposeNotIdleException: Idling resource timed out: possibly due to compose being busy.
IdlingResourceRegistry has the following idling resources registered:
- [busy] ComposeIdlingResource is busy due to pending recompositions.
- Note: Timeout on pending recomposition means that there are most likely infinite re-compositions happening in the tested code.
- Debug: hadRecomposerChanges = true, hadSnapshotChanges = false, hadAwaitersOnMainClock = false
All registered idling resources: Compose-Espresso link
at androidx.compose.ui.test.EspressoLink_androidKt.rethrowWithMoreInfo(EspressoLink.android.kt:133)
at androidx.compose.ui.test.EspressoLink_androidKt.runEspressoOnIdle(EspressoLink.android.kt:106)
at androidx.compose.ui.test.EspressoLink.runUntilIdle(EspressoLink.android.kt:82)
at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.waitForIdle(ComposeUiTest.android.kt:596)
at androidx.compose.ui.test.AndroidComposeUiTestEnvironment.access$waitForIdle(ComposeUiTest.android.kt:391)
at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitForIdle(ComposeUiTest.android.kt:721)
at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.setContent(ComposeUiTest.android.kt:801)
at androidx.compose.ui.test.junit4.AndroidComposeTestRule.setContent(AndroidComposeTestRule.android.kt:404)
at com.sample.tmdb.common.ui.component.PersonCardTest.personCardTest(PersonCardTest.kt:22)
... 64 trimmed
Caused by: androidx.test.espresso.IdlingResourceTimeoutException: Wait for [Compose-Espresso link] to become idle timed out
at androidx.test.espresso.IdlingPolicy.handleTimeout(IdlingPolicy.java:4)
at androidx.test.espresso.base.UiControllerImpl$5.resourcesHaveTimedOut(UiControllerImpl.java:1)
at androidx.test.espresso.base.IdlingResourceRegistry$Dispatcher.handleTimeout(IdlingResourceRegistry.java:4)
at androidx.test.espresso.base.IdlingResourceRegistry$Dispatcher.handleMessage(IdlingResourceRegistry.java:6)
at android.os.Handler.dispatchMessage(Handler.java:101)
at androidx.test.espresso.base.Interrogator.loopAndInterrogate(Interrogator.java:14)
at androidx.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:8)
at androidx.test.espresso.base.UiControllerImpl.loopMainThreadUntilIdle(UiControllerImpl.java:16)
at androidx.test.espresso.Espresso$1.run(Espresso.java:1)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
< /code>
Ich kann nicht herausfinden, warum. Habt ihr eine Idee?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post