[kotlin] 안드로이드 UI 테스트 리팩토링 방법

안드로이드 앱을 개발하다 보면 사용자 인터페이스(UI) 테스트 코드도 계속해서 변화하게 됩니다. 테스트 코드를 유지보수하기 쉽게 만들기 위해서는 리팩토링이 필요합니다. 이 글에서는 안드로이드 UI 테스트를 리팩토링하는 방법에 대해 알아보겠습니다.

1. 테스트 코드 분리

코드를 관리하기 쉽도록 테스트 코드를 기능별로 분리하는 것이 중요합니다. 예를 들어, 로그인 기능의 UI 테스트 코드와 회원가입 기능의 UI 테스트 코드를 분리하여 관리하면 코드의 가독성이 높아지고 유지보수가 용이해집니다.

// 로그인 테스트 코드
class LoginUITest {
    // 테스트 메서드들...
}

// 회원가입 테스트 코드
class SignupUITest {
    // 테스트 메서드들...
}

2. 페이지 객체(POM) 패턴 도입

안드로이드 UI 테스트 코드에서는 페이지 객체(POM) 패턴을 도입하여 웹 페이지의 각 요소를 객체로 표현하고 관리합니다. 이를 통해 UI 요소의 변경에 유연하게 대응할 수 있습니다.

class LoginPageObject(private val driver: AndroidDriver<MobileElement>) {
    private val usernameField: MobileElement = driver.findElement(By.id("username"))
    private val passwordField: MobileElement = driver.findElement(By.id("password"))
    private val loginButton: MobileElement = driver.findElement(By.id("login"))

    fun enterUsername(username: String) {
        usernameField.sendKeys(username)
    }

    fun enterPassword(password: String) {
        passwordField.sendKeys(password)
    }

    fun clickLoginButton() {
        loginButton.click()
    }
}

3. 데이터와 액션 분리

UI 테스트 코드에서는 데이터와 액션을 분리하여 관리하는 것이 좋습니다. 예를 들어, 특정 데이터를 입력하고 버튼을 클릭하는 동작을 별도의 메서드로 분리하여 가독성을 높일 수 있습니다.

class LoginPageObject(private val driver: AndroidDriver<MobileElement>) {
    // 페이지 요소들...

    fun enterUserDataAndLogin(username: String, password: String) {
        enterUsername(username)
        enterPassword(password)
        clickLoginButton()
    }
}

UI 테스트 코드를 리팩토링함으로써 테스트 코드의 가독성과 유지보수성을 높일 수 있습니다. 이는 향후 앱의 변화에 대응하는 데 큰 도움이 될 것입니다.

참고 자료