좋은 단위 테스트 코드 작성[안드로이드]

김동경·2024년 1월 24일
0

Android_Jetpack_Compose

목록 보기
7/7
post-custom-banner

테스트 코드?

기능과 동작을 테스트하는데 사용하는 코드

테스트 코드는 개발자가 작성한 코드를 실행하고 예상된 결과가 나오는지 확인할 때 사용한다.


단위 테스트

개별적인 코드 단위(클래스,함수,속성)가 의도한 대로 작동하는지 확인하는 과정

  • 소수의 코드를 직접 테스트하여 제대로 작동하는지 확인하는 유형
  • 워크스테이션에서 실행되기 때문에 에뮬레이터 없이 실행 가능

단위 테스트는 보통 junit.Assert 함수를 통해 작성한다.
JUnit은 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다.

Junit은 각 테스트 메서드가 실행되기 전 테스트 클래스의 새 인스턴스를 만들기 때문에 테스트의 순서는 중요하지 않게 해주며 테스트 클래스 파일 안에서도 한개의 뷰모델 인스턴스만 선언해주면 된다.

자세한 단위 테스트 작성 방법은 안드로이드 Codelab 을 참고


좋은 테스트 전략

좋은 테스트 전략의 핵심은 코드의 여러 경로와 경계를 포함하는 것

기본적인 수준으로 성공 경로, 오류 경로, 경계 사례 3가지로 나눌 수 있다.

성공 경로
긍정적인 흐름의 기능 테스트에 집중. 긍정적인 흐름은 예외나 오류 조건이 없는 흐름을 말한다. 앱의 의도된 동작에 초점을 맞추기 때문에 작성하기 쉽다.
ex) 사용자가 올바른 입력을 하고 올바른 결과가 나오는 시나리오

오류 경로
부정적인 흐름의 기능 테스트로 앱이 오류 조건 또는 잘못된 사용자 입력에 어덯게 응대하는지 초점을 맞춘다. 의도된 동작이 실행되지 않을 때 발생할 수 있는 결과는 매우 많기 때문에 모두 파악하기 어렵다
ex) 사용자가 잘못된 입력을 했을 때의 시나리오

경계 사례
경계 사례는 앱의 경계 조건을 테스트하는데 초점을 맞춘다. 앱이 로드될 때의 Ui 상태나 로직을 다 수행해 새로운 Ui로 넘어갈 때나 리셋된 경우 ui상태

Android Codelab단위 테스트 작성을 통해 직접 단위 테스트의 예를 작성해볼 수 있다.


좋은 단위 테스트 만들기

  • 집중 : 코드 조각(클래스,메서드)과 같은 단위를 테스트하는데 중점을 둬야한다. 테스트의 범위를 좁히고 동시에 여러코드가 아닌, 개별 코드의 정확성을 검증하는데 중점을 둔다.
  • 이해 가능 : 코드를 읽을 때 간단하고 읽기 쉬워야 하며 테스트의 의도를 한눈에 파악할 수 있어야 한다.
  • 확정성 : 일관되어야한다. 코드를 변경하지 않고 테스트를 여러 번 실행하면 테스트의 결과가 동일해야 한다.
  • 독립형 : 사람이 상호작용하거나 설정할 필요가 없으며 개별적으로 실행된다.


테스트 함수 이름 지정

thingUnderTest_TriggerOfTest_ResultOfTest 형식을 사용하여 테스트 함수 이름을 지정

ex)

  • thingUnderTest = viewmodel

  • TriggerOfTest = Correct

  • ResultOfTest = UpdateAnswer



코드 적용 범위 파일

테스트 코드파일 작성 후 우클릭에서 Run with Coverage 옵션을 선택할 수 있다.

코드 범위를 확인할 수 있다. GameViewModel에서 8개의 메서드 중 8개가 사용되었고 41의 코드 줄 중 41개의 코드 줄이 사용된 것을 확인할 수 있다.

코드의 적용 비율이 높다고 해서 앱 코드의 품질이 우수하다는 의미는 아니다.

낮은 적용 범위는 코드의 많은 부분이 완전히 테스트 되지 않았음을 의미함.



참고문헌

Android Codelab
요즘It 테스트 코드는 왜 만들까?

profile
개발하는 꿈나무
post-custom-banner

0개의 댓글