HOME > android > jetpack

Android Espresso를 사용하여 UI를 테스트하는 방법 (3)

JSFollow16 Nov 2018

이번 글에서는 에스프레소를 이용하여 EditText를 테스트하는 코드에 대해서 알아보겠습니다.

Android Espresso를 사용하여 UI를 테스트하는 방법 (2)에 이어지는 3번째 글입니다.

SecondActivity 테스트 코드 작성

SecondActivity는 MainActivity와 거의 동일합니다. MainActivity에는 EXTRA가 "korea"로 하드코딩되어있지만, SecondActivity는 EditText를 통해 입력을 받아 전달한다는 것이 다릅니다.

androidTest폴더에 SecondActivityTest.kt를 생성하고 기본적인 내용들을 입력해줍니다.

@RunWith(AndroidJUnit4::class)
class SecondActivityTest {
    @Rule
    @JvmField
    var activeRule = ActivityTestRule(SecondActivity::class.java)

}

첫번째 테스트

사람이 손으로 EditText에 "korea"를 입력하고 눈으로 결과를 확인하는 단순 작업을 코드로 대신하려고 합니다.

아래 처럼 코드를 입력하면, EditText에 "korea"를 입력하고... 올바른 결과가 리턴되었는지 확인할 수 있습니다.

perform(typeText(inputStr)는 인자로 전달된 변수를 EditText에 입력하라는 의미입니다. closeSoftKeyboard()는 SoftKeyboard가 열려 있으면 닫으라는 의미입니다.

FAB버튼을 누르면 LocaleActivity가 실행되는데요. 이 때 올바른 Locale이 출력되고 있는지 확인합니다.

OK버튼이 눌리면 MainActivity로 Locale정보를 포함한 인텐트가 전달됩니다. MainActivity는 이 인텐트를 받고 결과를 출력해줍니다. 출력이 의도된대로 되었는지 확인합니다.

@Test
fun userInputTest() {
    val context = InstrumentationRegistry.getInstrumentation().targetContext

    val inputStr = context.getString(R.string.country_korea)
    onView(withId(R.id.editTextUserInput))
            .perform(typeText(inputStr), closeSoftKeyboard())

    onView(withId(R.id.fab))
            .perform(click())

    onView(withId(R.id.tvLocale))
            .check(matches(withText(R.string.locale_korea)))

    onView(withId(R.id.btnOk))
        .perform(click())

    onView(withId(R.id.tvResultLocale))
        .check(matches(withText(R.string.locale_korea)))
}

정리

Espresso를 이용하여 EditText가 있는 UI를 테스트해보았습니다.

참고