소프트웨어 개발에서 테스트는 종종 저평가 되거나 무시되버리곤 한다.
모바일앱에서 테스트 코드를 하나도 작성하지 않고 앱을 출시하는 경우도 허다 합니다.
 
대부분 개발자가 유닛테스트를 적용하지 않는 이유는?

  • 모바일 앱은 프론트앤드니까 대부분은 백엔드에서 테스트해야 되지!
  • 모바일은 유닛테스트부분에서는 좀 달라, 왜냐면 대부분의 로직이 UI랑 연결되어있거든! 기껏해봐야 넌 UI 테스트만 신경쓰겠지.
  • 백엔드랑 비교하면 모바일앱은 심플하고 작잖아 . 그러니까 테스트코드 만드는데 시간 낭비하느니 기능을 구현하는데 더 노력해야지!

 
요즘, 모바일앱은 점점 거대해지고 점점 복잡해지고 있다.
그렇기 때문에 제대로 된 하나의 모바일 앱을 만들기 위한 개인개발은 점점 힘들어지고, 개발팀의 경우에는 그 규모도 점점 커지고 있는 실정이다.
몇몇 회사들은 팀을 분리하여서 각자의 맡은 역할을 분리하여 개발을 하게되고, 모듈화된 feature들을 합친다거나, 앱스토어에 최종빌드된 산출물을 업로드하는 팀도 있다.
코드 복잡성과 팀 공동 작업이 증가하면 애플리케이션이 제대로 작동하지 않을 수도 있다.
좋은 테스트코드는 이러한 점을 극복하게 해준다.
 
이 포스팅에서는 Model-View-Presenter 아키텍처 패턴과 Mockito를 이용한 단위 테스트에 대해 알아보고자 합니다.
먼저 테스팅피라미드에 대해서 알아보겠습니다.
 

테스팅피라미드

테스트는 일반적으로 세단계에 걸쳐 이루어집니다.
testing pyramid
 

  • UI Tests:
    사용자를 대신해서 애플리케이션의 UI를 테스트한다. 실제 디바이스나 에뮬레이터의 실행이 필요하기 때문에 세단계중에 가장느리고 비용이 많이 드는 테스트 입니다.
  • Integration Tests :
    UI는 제외하고 개발자가 작성한 코드가 어떻게 안드로이드 프레임워크와 상호작용을 하는지 확인해볼 필요가 있을 경우. 이러한 테스트는 에뮬레이터나 실기기가 필요가 없다. 이러한 구현 테스팅은 Roboelectric 이라는 툴이 안드로이드에서 가장 대표적인 툴이다.
  • Unit Tests(단위테스트):
    System Under Test(SUT)는 개발자가 집중해서 지켜보는 하나의 클래스이다. 모든 종속성은 올바르게 작동하는것으로 간주한다. 그래서 해당 종속성은 mock 또는 stub이 됩니다.
    이러한 테스트들은 실제 디바이스나 에뮬레이터가 필요없기때문에 빠르게 적은비용으로 작성할 수 있습니다.  Android에서 가장 일반적으로 사용되는 단위 테스트 도구는 JUnit과 Mockito 입니다.
    Note:Mock과 Stub같은 테스트 더블에 대한 내용은 이전 포스팅을 확인하시기바랍니다.

 
일반적으로 다음과 같은 테스트 비중을 가지게 됩니다.
UI Tests 10%
Integration Tests 20%
Unit Tests 70%
단위테스트가 매우 중요하기 때문에 가장 많은 비중을 갖게 됩니다.
 

카테고리: Kotlin

0개의 댓글

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.