상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
가족여행을 계획하는 주요 이유는 무엇인가요?
장기 세계여행 시 지켜야 할 안전 수칙은 무엇인가요?
유산균이 심리적 스트레스에 미치는 영향은 무엇인가요?
유산균이 질병에 대한 신체의 반응을 어떻게 조절할까요?
유산균이 여성 호르몬에 미치는 영향은 무엇인가요?
해외 다국적 기업의 대규모 투자 유치 과정에서 토지보상 및 인허가 절차를 단축하기 위한 제도적 개선방안은 무엇일까?
DeFi(탈중앙화 금융)는 이더리움과 어떤 관련이 있나요?
이더리움의 영어 발음은 어떻게 되나요?
과거 해킹 사건 이후 솔라나 재단이 공개한 대응 보고서는 무엇을 포함하고 있나요?
분유 사용 시 주의해야 할 세균 오염
분유도 알콜이 포함될 수 있나요?
분유를 혼합할 때의 주의사항
Previous
Next
수정하기 - Robolectric에서 애니메이션 테스트를 어떻게 할 수 있나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric은 Android <a href='https://sangseek.com/sangseeks/유닛테스트/ko'>유닛테스트</a>를 JVM 환경에서 실행할 수 있게 해주는 프레임워크로, 실제 디바이스나 에뮬레이터 없이도 UI 컴포넌트의 동작을 확인할 수 있도록 해줍니다. 하지만 애니메이션은 기본적으로 Android 프레임워크에서 시간에 따라 속성이 변화하며 UI를 갱신하는 과정을 포함하기 때문에, 로직이나 뷰의 상태 변경 외에 실제 애니메이션 실행을 Robolectric에서 완벽히 시뮬레이션하기는 어렵습니다. 그럼에도 Robolectric에서 애니메이션 테스트를 하려면 흔히 다음과 같은 방법들을 씁니다. 1. 애니메이션 코드의 상태 변화만 테스트하기 사실상 애니메이션은 시간에 걸쳐 속성들이 변경되는 과정입니다. 따라서 애니메이션이 끝났을 때 뷰가 예상 상태에 도달했는지, 또는 애니메이션 재생이 올바르게 시작되고 끝나는지 체크하는 방식을 많이 씁니다. 예를 들어, 애니메이션 시작 시 특정 플래그가 true가 되고, 애니메이션 종료 시 플래그가 false가 되게 한다면, Robolectric 테스트에서는 이 플래그의 상태 변화를 확인할 수 있습니다. 2. Robolectric의 Scheduler 사용 Robolectric은 기본적으로 UI쓰레드와 타이머 실행을 제어하는 Scheduler를 제공합니다. 애니메이션은 보통 `ValueAnimator`나 `ObjectAnimator`를 내부적으로 사용하며, 이들은 Handler나 Choreographer를 써서 프레임을 업데이트합니다. Robolectric의 `ShadowLooper` 또는 `ShadowChoreographer`를 통해 큐에 쌓인 메시지(즉, 애니메이션 업데이트 실행)를 강제로 실행시킬 수 있습니다. ```java ShadowLooper.runUiThreadTasks(); ``` 또는 ```java ShadowLooper.idleMainLooper(); ``` 이런 명령어를 호출하여 애니메이션 진행에 따른 각 프레임 작업들이 처리되게 할 수 있습니다. 이 방법을 통해 애니메이션이 실제 시간 없이도 "실제 실행된 것처럼" 진행하도록 시뮬레이션하고 나서, 최종 상태를 검증할 수 있습니다. 3. Animator 테스트 관련 Shadow 사용 Robolectric은 기본적으로 Animator 관련 클래스의 Shadow를 제공하여 애니메이션 진행을 제어할 수 있게 합니다. 예를 들어 `ShadowValueAnimator`는 `getAnimatedValue()` 등의 메서드를 사용할 수 있고, `start()`로 시작하면 애니메이션이 즉시 완료되는 식으로 구현될 수 있습니다. 따라서 애니메이션을 테스트할 때 활성화 후 바로 완료 상태가 된다고 가정하고, 결과만 체크하는 편이 일반적입니다. 4. Ticker, Time 조작 Robolectric은 내부 시간을 조작하여 타이머나 애니메이션 타임라인을 건너뛰는 방식도 지원합니다. `Robolectric.getForegroundThreadScheduler().advanceTo()` 또는 `advanceBy()` 등을 사용하여 특정 시간만큼 스케줄러를 이동시키면, 애니메이션 타이머 이벤트가 함께 소화됩니다. 5. 복잡한 애니메이션은 모의 객체(Mock)로 처리 만약 애니메이션 자체 구현 로직이 복잡하고, Robolectric 환경에서 제대로 동작하지 않는다면 애니메이션 호출부를 목(mock) 처리하고, 애니메이션이 시작되었는지 여부나 완료 콜백 호출 여부만 검증하는 방법도 많이 사용합니다. --- 정리하자면, Robolectric에서 애니메이션 테스트는 실제 애니메이션 ‘모션’을 눈으로 확인하기 어렵고, 내부 실행 단계 수동 조작을 통해 애니메이션 관련 콜백, 상태 변화, 결과 상태를 검증하는 스타일입니다. `ShadowLooper`로 UI쓰레드 작업을 실행하고, `ShadowValueAnimator` 같은 shadow 클래스를 활용하며, 필요하면 시간을 앞으로 넘기면서 애니메이션 진행을 모방합니다. 최종적으로는 애니메이션이 끝난 뒤 뷰 상태나 콜백 호출 여부를 포커스하여 검증하는 방식을 권장합니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기