상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Robolectric에서 ObjectAnimator를 어떻게 테스트하나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric 환경에서 ObjectAnimator를 테스트할 때 몇 가지 중요한 점을 이해하고 적절히 처리해야 합니다. 일반적인 Android 디바이스 환경에서는 ObjectAnimator가 내부적으로 프레임 단위로 애니메이션을 처리하지만, Robolectric에서는 실제 UI 스레드와 프레임 타이밍 동작이 다르기 때문에 기본적으로 애니메이션이 바로 완료되지 않고 중간 상태를 확인하기 어렵습니다. 다음은 Robolectric에서 ObjectAnimator를 효과적으로 테스트하는 방법들입니다. --- 1. 애니<a href='https://sangseek.com/sangseeks/메이터/ko'>메이터</a> 실행 및 진행 강제하기 Robolectric은 별도의 스케줄러와 루퍼를 사용하므로, 애니메이터가 재생되는 타이밍을 직접 제어해줘야 합니다. ```java ObjectAnimator animator = ObjectAnimator.ofFloat(targetView, "alpha", 0f, 1f); animator.setDuration(1000); animator.start(); // 애니메이터가 내부적으로 사용하는 ValueAnimator의 타임라인을 진행시킵니다. ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); ``` `ShadowLooper.runUiThreadTasksIncludingDelayedTasks()` 를 호출하면 UI 스레드에서 예약된 모든 작업과 지연 작업들이 실행되어 ObjectAnimator가 정상적으로 진행됩니다. --- 2. 애니메이터 상태를 직접 제어하기 ObjectAnimator는 내부적으로 ValueAnimator를 사용하기 때문에 ShadowValueAnimator를 통해 상태를 직접 조작할 수 있습니다. ```java ShadowValueAnimator shadowAnimator = shadowOf(animator); shadowAnimator.setCurrentPlayTime(500); // 애니메이터의 진행 시간을 500ms로 설정 ``` 이렇게 하면 테스트 중간 상태를 확인할 수 있고, 필요한 시점에 애니메이션 값이 어떻게 변화하는지 검증할 수 있습니다. --- 3. Robolectric의 애니메이터 자동 실행 제한 문제 Robolectric 기본 설정에서는 ValueAnimator가 애니메이션을 자동으로 즉시 완료하지 않고, 시간을 명시적으로 진행시켜야 합니다. 이를 해결하기 위해 매 테스트마다 아래와 같은 조치를 취할 수 있습니다. ```java ShadowValueAnimator shadowAnimator = shadowOf(animator); shadowAnimator.start(); shadowAnimator.end(); ``` `start()`와 `end()`를 호출하면 애니메이터가 즉시 실행되고 종료되어 애니메이션이 끝난 상태를 바로 테스트에 반영할 수 있습니다. --- 4. 전체 예제 ```java @Test public void testObjectAnimator_alphaAnimation_changesAlpha() { View view = new View(RuntimeEnvironment.getApplication()); ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f); animator.setDuration(1000); animator.start(); // 진행 시간을 절반으로 올려 중간 값 확인 ShadowValueAnimator shadowAnimator = shadowOf(animator); shadowAnimator.setCurrentPlayTime(500); float currentAlpha = view.getAlpha(); assertTrue(currentAlpha > 0f && currentAlpha < 1f); // 끝까지 진행 shadowAnimator.end(); assertEquals(1f, view.getAlpha(), 0); } ``` --- 요약 - Robolectric에서는 ObjectAnimator가 자동으로 진행되지 않으므로, ShadowValueAnimator를 사용해서 애니메이션 시간을 직접 조작해야 합니다. - 애니메이션 진행을 `setCurrentPlayTime()` 으로 조절하거나, `start()` 와 `end()` 를 호출하여 애니메이션을 즉시 실행 및 완료할 수 있습니다. - UI 스레드 작업을 진행시키고 싶을 때는 `ShadowLooper.runUiThreadTasksIncludingDelayedTasks()` 를 사용합니다. 이러한 조작을 통해 Robolectric 환경에서도 ObjectAnimator를 정확하게 제어하고 그 상태를 검증하는 테스트 코드를 작성할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기