Open5
Android Jetpack ComposeのUI Testの技(メモ)
Q: Question) drawerContentのテストについて。同じ画面上のコードなのに、assertIsDisplayedは正常に機能するのか。
A: Answer) 正常に機能する
コード
例えば
Contents code
Scaffold(
scaffoldState = drawerState,
topBar = {
TopAppBar(
title = { Text(text = pagename.value) },
navigationIcon = {
IconButton(onClick = {
scope.launch {
drawerState.drawerState.open()
}
}) {
Icon(Icons.Filled.Menu, contentDescription = "Open Menu Bar")
}
}
)
},
drawerContent = {
Column() {
Column(
Modifier
.fillMaxWidth()
.padding(0.dp, 20.dp)
) {
TextButton(onClick = {}, modifier = Modifier.fillMaxWidth().padding(0.dp, 0.dp, 0.dp, 20.dp)) {
Icon(Icons.Filled.SwitchAccount, contentDescription = "Switch Account")
Text(text = "Switch Account")
}
...略
というコードがあったとき、以下のコードでdrawerContentsがOpenされたかどうかが正常に判断される。
Test code
@Test
fun pushMenuButton() {
composeTestRule
.onNodeWithContentDescription("Open Menu Bar")
.performClick()
composeTestRule.onNodeWithText("Switch Account").assertIsDisplayed()
}
@Test
fun notPushMenuButton() {
composeTestRule.onNodeWithText("Switch Account").assertIsDisplayed()
}
結果
UIテストで、Enterキーを押したい。しかし、performKeyPressの中に何を入れて良いのかわからない。
苦肉の策で、以下のように、改行コードで代用したが上手くいかない。
composeTestRule
.onNode(hasContentDescription("Input Address")
and hasText(nameLabel))
.performTextInput("akira@da.yo\n")
結局、以下の記事に書いた方法で出来た(全然、記事が落ちていなかったので、記事にしておきました。)
テストを値を変えて、繰り返し実行させたい。
以下のサイトのやり方で出来た。
これ以外の方法も考えて追記して記事にまとめた。
@Testアノテーションを付けない関数を呼び出す時に
val a = listOf(fun1("WAWA"), fun2(2), fu3())
のように、関数をリストで持たせたいと思っちゃうけど、これは出来ない。面倒でも、if文とかswitchとかで書くのがbetter。