반응형
#
Compose Test 는 view 영역이기 때문에 Instrumentation test 를 통해야 한다.
#
test 를 위해 아래 dependency 가 필요하다.
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")
#
TestRule 은 createComposeRule 을 사용한다.
만약 Activity 에 접근해야 한다면 createAndroidComposeRule<YourActivity>()를 사용한다.
class UiTests{
@get:Rule
val composeTestRule = createComposeRule()
private fun setContent(){
composeTestRule.setContent{
MyTheme{
MyScreen()
}
}
}
@Test
fun testIntroTextExist(){
setContent()
composeTestRule.onNodeWithText("Welcome bro!").assertExists()
}
@Test
fun testCorrectResultForInput(){
setContent()
composeTestRule.onNodeWithText("Input number").performTextInput("10")
composeTestRule.onNodeWithText("10 x 5 = 50").assertIsDisplayed()
}
}
#
node (composable, view) 를 찾는 방법은 onNode 또는 onAllNode 가 있고, 위의 예시처럼 onNodeWithText 와 같은 variation 들이 있다.
composeRule.onNode(hasText("Button"))
composeRule.onAllNodes(hasText("Button"))
#
assert 도 여러 variation 이 있다.
foundNode.assert(hasText("Welcome"))
foundNode.assert(hasText("Welcome") or hasText("Go away"))
foundNodes.assertCountEquals(4)
foundNodes.assertAny(hasTestTag("Dreamer"))
foundNodes.assertAll(hasClickAction())
#
action 을 가하는 것도 종류가 많다.
node.performClick()
node.performSemanticsAction(key)
node.performKeyPress(keyEvent)
node.performGesture{ swipeLeft() }
#
printToLog 함수를 통해 view(composition) hierarchy 도 볼 수 있다.
unmergedTree 는 합쳐지지 않은 raw composable 들을 보여준다. 예를 들어 Button 안에 "Hello", "World" 2개의 Text 를 그렸다면, merged 에서는 "Hello World" 버튼 하나로 보이지만, unMergedTree 에서는 Button, Hello Text, World Text 이렇게 raw composable 이 모두 보이게 된다.
useUnmergedTree default 값은 false 이다.
composeTestRule.onRoot(useUnmergedTree=true).printToLog("TAG")
#
참고 링크
끝
반응형
'프로그래밍 놀이터 > Compose' 카테고리의 다른 글
[android] ImageButton in Compose (IconButton) (0) | 2022.09.16 |
---|---|
[android] Switch in Compose (0) | 2022.09.14 |
[android] EditText in Compose (TextField) (0) | 2022.09.13 |
[android] margin in Compose (0) | 2022.09.12 |
[android] modifier in compose (0) | 2022.09.11 |
댓글