-
Tests App on Android(1)Android 2021. 6. 28. 17:54
테스트를 하는 이유
- 장애에 관한 신속한 피드백
- 개발 주기에서 조기 장애 감지
- 코드를 최적화할 수 있도록 하는 더 안전한 Code Refactoring
- 기술적 문제를 최소화하는 안정적인 개발 속도
안드로이드 테스트 종류
Unit Test
- 일반적으로 코드의 유닛 단위(메소드, 클래스, 컴포넌트)의 기능을 실행하는 방식
- JVM 상에서 실행되는 local unit tests
- 실제 기기 및 에뮬레이터에서 실행되는 instrumented unit tests
Integration Tests
- 단위 테스트가 완료된 모듈들을 합쳐서 하는 테스트
- 앱에서 데이터가 가공되는 로직 테스트
UI Tests
- 사용자 인터랙션(버튼 클릭, 텍스트 입력 등) 테스트
- 단일 앱 UI tests
- 멀티 앱 UI tests (예 : 카메라 앱이 타사 소셜 미디어 앱과 이미지를 공유하는 테스트)
Levels of the Testing Pyramid
Small Test
- 각 컴포넌트 및 기능 단위의 동작을 검증
Medium Test
- 각 모듈 간의 상호작용을 검증하는 통합 테스트
Large Test
- 실제 유저가 보는 화면을 기준으로, emulator나 실제 Device에서 예상대로 작동하는지 확인하는 테스트
일반적으로 Small 70%, Medium 20%, Large 10% 비율로 테스트 추천한다.
Android Unit Tests
Local unit tests
- module-name/src/test/java/ 에 테스트 파일 저장
- 컴퓨터의 로컬 JVM(Java Virtual Machine)에서 실행되는 테스트
- 안드로이드 프레임워크 종속성이 없거나 모의 객체를 생성할 수 있는 경우 사용
Instrumented tests
- module-name/src/androidTest/java/ 에 테스트 파일 저장
- 안드로이드 기기나 에뮬레이터에서 실행되는 테스트
- 사용자 상호작용을 자동화하는 통합 및 기능적 UI 테스트를 작성하거나 테스트에 모의 객체가 충족할 수 없는 Android 종속성이 있는 경우 사용
Android Unit Tests framework
Junit
- Java Unit Test Framework
- 어노테이션(Annotation) 지원
- 단정문으로 테스트 케이스의 수행 결과를 판별함 Ex) assertEquals(예상 값, 실제 값)
- 결과는 성공(녹색), 실패(붉은색)으로 표시
Mockito
- Java에서 단위 테스트를 하기 위해 Mock(가짜 객체)를 만들어주는 Framework
- Junit과 함께 Unit test를 작성하는데 사용
Roboletric
- android sdk가 제공하는 클래스에 가짜 동작을 심어서 JVM에서 android 코드를 실행하는 Framework
- View객체를 별도의 mock(가짜 객체) 없이 그대로 사용가능
주요 Annotation
@Before, @After가 메소드 위에 선언되면
해당 테스트 클래스 안에 메소드들이 테스트(@Test) 되기 전과 후에 각각 실행되게 지정하는 어노테이션이다.@Test가 메소드 위에 선언되면 이 메소드는 테스트 대상 메소드임을 의미한다.
@Test(timeout=5000)를 메소드 위에 선언합니다. 시간단위는 밀리 초 입니다.
이 테스트 메소드가 결과를 반환하는데 5,000밀리 초를 넘긴다면 이 테스트는 실패하는 것이다.@Test(expected=RuntimeException.class)가 메소드 위에 선언되면
이 테스트 메소드는 RuntimeException이 발생해야 테스트가 성공, 그렇지 않으면 실패하는 것이다.@BeforeClass, @AfterClass가 메소드 위에 선언되면
해당 테스트 클래스에서 딱 한 번씩만 수행되도록 지정하는 어노테이션이다.단정문
assertArrayEquals(a,b) : 배열 a와b가 일치함을 확인
assertEquals(a,b) : 객체 a와b의 값이 같은지 확인
assertSame(a,b) : 객체 a와b가 같은 객체임을 확인
assertTrue(a) : a가 참인지 확인
assertNotNull(a) : a객체가 null이 아님을 확인
이외에도 다양한 단정문이 존재한다.References
'Android' 카테고리의 다른 글
ViewPager2 (0) 2021.07.10 Tests App on Android(2) - Robolectric (0) 2021.07.01 Room Database (0) 2021.06.14 ConstraintLayout(2) (0) 2021.06.13 ConstraintLayout(1) (0) 2021.06.11