테스트는 왜 필요할까요? 다음의 몇가지를 들 수 있습니다.

  • 필요한 조건을 만족하는지 확인
  • 오류 발견
  • 앱의 사용성을 확인

자동테스트 & 수동테스트

수동테스트는 코딩 작업이 끝난 상태에서 apk를 만들고, 체크리스트로 작성한 테스트 케이스를 차례대로 실행하는 형태로 이뤄지는 경우가 많습니다.

 

수동 테스트의 특성

  • 최종 사용자와 완전히 똑같이 동작을 확인할 수 있다.
  • 사용성이나 쾌적함 등 정성적인 면에서 평가할 수 있다.

자동테스트는 '단위 테스트' , 'UI 테스트' 로 불리는 테스트 코드를 만들어 테스트 코드를 실행함으로써 앱이 바르게 동작하는지 확인합니다.

 

자동테스트의 특성

  • 반복 실행이 가능하다.
  • 테스트 실행 상황을 시각화할 수 있다.
  • 클래스와 메서드 등 사용자 조작으로 확인하기 어려운 단위의 동작을 확인할 수 있다.

이런 특성들이 있어 자동 테스트로 동작에 대체로 이상이 없다는 것을 확인한 다음, 수동 테스트를 통해 공개 전 최종 확인 및 사용자 경험을 최적화하는 식으로 구분해서 생각합니다. 

 

단위 테스트

클래스나 메서드처럼 아주 작은 단위를 검증하기 위해 실행되는 테스트입니다. 소스코드 자체의 타당성이나 품질을 확인할 수 있으며, 가장 작은 단위로 검증이나 실행이 이뤄지므로 실행 시간도 아주 짧습니다. 그러므로 일반적으로 통신이나 IO 처리와 같은 외부 리소스와의 통신을 무효로 하고, 단말이나 환경에 의존하지 않는 상태로 테스트할 필요가 있습니다.

UI 테스트

실제 동작 환경을 중요시하므로 일반적으로는 실제 기기나 에물레이터 상에서 실행됩니다. 

이름 그대로 단말의 표시를 바탕으로 확인해 갑니다. 또한 통신이나 IO 처리 등 외부 리소스를 이용해 테스트하는 경우도 있습니다.

 

JUnit

자바에서 사실상의 표준이 되는 단위 테스트 프레임워크이며, 버전 3과 버전 4의 큰 차이 중 하나는 테스트 코드에 어노테이션이 이용되는 점을 들 수 있습니다.

 

 

Mockito를 이용한 객체의 목화

단위 테스트에서는 IO 처리 등과 같은 외부의 영향을 받지 않게 테스트를 작성해야 합니다.

 

예를 들어, HTTP 통신을 하는 경우를 생각해 봅시다.
테스트할 때 HTTP 통신을 실제로 하는 테스트를 작성해 버리면 단말 설정이나 서버 사오항에 따라 테스트 결과가 달라집니다.  그런 상황에서는 테스트에 실패해도 코드에 문제가 있는지, 그렇지 않으면 설정 등 주변 환경에 문제가 있는지 판단할 수 없기에 신뢰할 수 있는 테스트라고 할 수 없습니다.

 

이런 사태를 피하고자 테스트할 때는 의존하는 처리를 위장할 필요가 생깁니다.

HTTP 통신의 예에서 위장이란 어떤 테스트에서는 성공 응답을 반드시 반환하고, 반대로 다른 테스트에서는 반드시 실패 응답을 반환하는게 되겠지요. 추상적으로 말하면 위장이란 '실제 처리는 하지 않고 원하는 값을 반환하거나 처리를 실행시키는 것' 이라고 할 수 있습니다. 위장한 객체를 잘 사용하면 언제 어떤 때라도 동작이 항상 일정한 테스트를 작성할 수 있게 됩니다.

 

이런 위장을 간편하게 구현할 때 사용하는 것이 '목 객체' 입니다. 

(목 라이브러리를 사용하지 않아도 테스트할 때 클래스를 상속하는 방식 등으로 위장을 실현할 수 있지만 구현할 게 너무 많아지므로 목 라이브러리를 사용하는 경우가 많습니다.)

'Android' 카테고리의 다른 글

@JvmOverloads  (0) 2020.12.15
[Android] 키패드에 따른 화면변경 설정하기  (0) 2020.04.20
[Android] Gradle  (0) 2020.04.10
[Android] ContentProvider, Service, BroadcastReceiver  (0) 2020.04.03
[Android] Activity, View, Layout  (0) 2020.04.03

+ Recent posts