본문 바로가기
프로그래밍 놀이터/Compose

[android] compose instrumentation test tutorial

by 돼지왕 왕돼지 2022. 9. 15.
반응형


#
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")

 

#

참고 링크

android 개발자 codelabs

android ref doc

compose test cheat sheet

 

 

반응형

댓글2