[android] Espresso 테스트 안티 패턴

안드로이드 앱을 개발하다 보면 UI 테스트 역시 중요한 부분이다. 특히 Espresso는 안드로이드 앱의 UI를 테스트하는 데 매우 유용한 도구이다. 하지만 Espresso 테스트를 작성할 때 발생하는 여러 안티 패턴으로 인해 테스트 코드가 유지보수하기 어렵고 이해하기 어려워질 수 있다.

안티 패턴이란?

안티 패턴이란, 코드나 설계에서 자주 발생하는 문제들을 가리키는 용어이다. Espresso 테스트 작성 시 자주 발생하는 안티 패턴은 다음과 같다.

안티 패턴 1: 복잡한 슬립(Sleep)

Thread.sleep(1000);

위와 같이 Thread.sleep()을 사용하여 일정 시간을 기다리는 방법은 안티 패턴이다. 이 방법은 실행 속도에 따라 테스트가 실패할 수 있으며, 실제로 필요한 시간보다 더 기다리는 경우가 많아 효율적이지 않다.

안티 패턴 2: 불명확한 테스트 범위

onView(withId(R.id.button)).perform(click());

onView()에 지정된 View에 대한 테스트 범위가 명확하지 않은 경우가 있다. 이렇게 되면 테스트가 정확히 어떤 부분을 대상으로 하는지 알기 어려워진다.

안티 패턴 3: 중복된 테스트 로직

테스트 코드에 중복된 로직이 들어가면 유지보수가 어렵고, 수정사항이 발생했을 때 모든 중복된 로직을 수정해야 하는 번거로움이 있다.

안티 패턴 대안

이러한 안티 패턴을 해결하기 위해 몇 가지 대안이 있다.

안티 패턴 1 대안: Idling Resource 사용

IdlingResource를 사용하여 Espresso가 액션을 수행하기 위해 기다리는 동안 앱이 블로킹되는 것을 방지할 수 있다. 이를 통해 Thread.sleep()을 사용하는 안티 패턴을 피할 수 있다.

안티 패턴 2 대안: 테스트 범위 명확히 지정

테스트 범위를 명시적으로 정의하고, 대상이 되는 UI 요소를 명확하게 지정하여 안티 패턴을 해결할 수 있다.

안티 패턴 3 대안: 테스트 로직 별도 모듈로 분리

중복된 테스트 로직을 별도의 모듈로 분리하고, 필요할 때 재사용할 수 있도록 코드를 구조화할 수 있다.

마무리

Espresso 테스트를 작성할 때는 이러한 안티 패턴을 피하고 대안을 사용하여 테스트 코드의 효율성과 가독성을 높이는 것이 중요하다. 이를 통해 유지보수가 용이하고 효율적인 테스트 코드를 작성할 수 있을 것이다.

참고: Developer Android - Espresso

위의 안티 패턴과 대안을 통해 Espresso 테스트 코드를 작성할 때 더욱 효율적이고 유지보수하기 쉬운 코드를 작성할 수 있을 것이다.