기능과 동작을 테스트하는데 사용하는 코드
테스트 코드는 개발자가 작성한 코드를 실행하고 예상된 결과가 나오는지 확인할 때 사용한다.
개별적인 코드 단위(클래스,함수,속성)가 의도한 대로 작동하는지 확인하는 과정
단위 테스트는 보통 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개의 코드 줄이 사용된 것을 확인할 수 있다.
코드의 적용 비율이 높다고 해서 앱 코드의 품질이 우수하다는 의미는 아니다.
낮은 적용 범위는 코드의 많은 부분이 완전히 테스트 되지 않았음을 의미함.