상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
계피를 이용한 수프 레시피는 무엇이 있나요?
독감으로 인한 사망률은 어느 정도인가요?
독감 예방접종의 중요성을 아는 것이 왜 중요한가요?
감기로 인한 코막힘을 줄이는 방법은 무엇인가요?
E형간염과 관련된 의료 정책의 개선 방안은 무엇인가요?
C형간염의 세계적인 유행현황은 어떤가요?
C형간염의 초기 예방 조치는 무엇인지요?
A형간염과 관련된 사회적 stigma는 어떤가요?
B형간염 검사 결과의 의미는 무엇인가요?
D형간염 진단 후 필요한 검사는 무엇이 있나요?
D형간염 환자가 가족과 함께 할 수 있는 활동은 무엇인가요?
물 1컵은 몇 온스인가요?
Previous
Next
수정하기 - Robolectric에서 Snackbar의 동작을 테스트하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric에서 Snackbar의 동작을 테스트하려면 일반적인 안드로이드 뷰나 토스트와는 다르게 약간의 추가 작업이 필요합니다. Snackbar는 `CoordinatorLayout` 위에 `BaseTransientBottomBar`를 이용해 동적으로 뷰를 추가하고, 애니메이션과 타이머에 의해 자동으로 사라지는 특성이 있어서, 이를 그대로 테스트 프레임워크에서 재현하기 위해 몇 가지 고려할 점이 있습니다. 다음은 Robolectric 환경에서 Snackbar 동작을 효과적으로 테스트하는 방법과 팁입니다. --- 1. 기본적으로 Snackbar가 보여지는지 확인하기 Snackbar는 내부적으로 `Snackbar.SnackbarLayout` 뷰를 생성하여 현재 액티비티나 프래그먼트의 뷰 위에 추가합니다. Robolectric에서는 뷰 계층 구조를 직접 탐색하여 이 뷰가 존재하는지 확인하는 방법으로 동작을 검증할 수 있습니다. ```java // 의존뷰는 예를 들어 CoordinatorLayout이나 단순 View View parentView = activity.findViewById(R.id.coordinator_layout); // Snackbar 생성 및 보여주기 Snackbar snackbar = Snackbar.make(parentView, "Test Snackbar", Snackbar.LENGTH_SHORT); snackbar.show(); // Robolectric 스케줄러 실행: 애니메이션 및 핸들러 메시지 진행 Robolectric.flushForegroundThreadScheduler(); // 뷰 계층에서 SnackbarLayout을 찾음 ViewGroup rootView = (ViewGroup) parentView.getRootView(); boolean snackbarFound = false; for (int i = 0; i < rootView.getChildCount(); i++) { View child = rootView.getChildAt(i); if (child instanceof Snackbar.SnackbarLayout) { snackbarFound = true; break; } } // 검증 assertTrue(snackbarFound); ``` 이처럼 Snackbar가 실제 뷰 트리에 추가되었는지 여부를 테스트할 수 있습니다. --- 2. 텍스트 내용, 행동 버튼 등 Snackbar 내부 UI 확인하기 Snackbar 내부의 텍스트 `TextView`나 버튼 `Button`을 찾아 내용 검증도 가능합니다. ```java Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) rootView.getChildAt(indexOfSnackbar); TextView textView = snackbarLayout.findViewById(com.google.android.material.R.id.snackbar_text); assertEquals("Test Snackbar", textView.getText().toString()); Button actionButton = snackbarLayout.findViewById(com.google.android.material.R.id.snackbar_action); assertEquals("RETRY", actionButton.getText().toString()); ``` 이렇게 텍스트와 액션이 올바르게 <a href='https://sangseek.com/sangseeks/셋팅/ko'>셋팅</a>되었는지 확인할 수 있습니다. --- 3. Snackbar 애니메이션, 타이머 동작 테스트 Snackbar는 `LENGTH_SHORT`, `LENGTH_LONG` 등에 따라 자동으로 사라지지만, Robolectric에서는 기본적으로 이런 타이머나 애니메이션이 즉시 처리되지 않습니다. 따라서 아래 단계를 활용합니다. - `Robolectric.flushForegroundThreadScheduler()` 또는 `Robolectric.getForegroundThreadScheduler().advanceToLastPosted<a href='https://sangseek.com/sangseeks/Runnable/ko'>Runnable</a>()` 호출해 타이머 핸들러를 실행합니다. - 이를 통해 스낵바가 자동으로 사라지는 이벤트를 처리하고, 뷰가 제거되는 상황을 시뮬레이션할 수 있습니다. 예) ```java snackbar.show(); // 타이머가 동작하여 Snackbar가 사라져야 하는 시점까지 진행 Robolectric.getForegroundThreadScheduler().advanceBy(3500, TimeUnit.MILLISECONDS); // 이제 뷰 트리에서 SnackbarLayout이 사라졌는지 확인 boolean snackbarExists = false; for (int i = 0; i < rootView.getChildCount(); i++) { if (rootView.getChildAt(i) instanceof Snackbar.SnackbarLayout) { snackbarExists = true; break; } } assertFalse(snackbarExists); ``` --- 4. 액션 버튼 클릭 테스트 Snackbar에 설정한 액션 버튼 클릭도 테스트 가능하며, 이를 위해 액션 버튼을 찾아서 `performClick()` 호출하면 됩니다. ```java Button actionButton = snackbarLayout.findViewById(com.google.android.material.R.id.snackbar_action); assertNotNull(actionButton); // 액션이 정상 등록되었는지, AtomicBoolean clicked = new AtomicBoolean(false); snackbar.setAction("RETRY", v -> clicked.set(true)); actionButton.performClick(); assertTrue(clicked.get()); ``` 액션 람다가 정상 실행되는지 확인할 수 있습니다. --- 5. 팁 및 주의사항 - `Snackbar.make()`에 전달하는 뷰는 현재 화면에 표시된 뷰 계층에 있어야 동작이 정확합니다. - Robolectric의 특정 버전에서는 Material Components 라이브러리와의 호환성 문제로 Snackbar 구현이 다를 수 있으므로, 라이브러리 버전과 Robolectric 버전을 맞춰 사용하는 것이 좋습니다. - 애니메이션 관련 처리를 위해서 Robolectric의 스케줄러 제어를 잘 활용해야 합니다. - 테스트가 매우 까다로운 경우, Snackbar 노출 여부를 검증하는 대신 비즈니스 로직에서 Snackbar 호출 여부를 간접적으로 확인하도록 리팩토링할 수도 있습니다. --- 요약 Robolectric에서 Snackbar 동작 테스트는 다음과 같습니다: 1. `Snackbar.show()` 호출 후 뷰 트리에 `Snackbar.SnackbarLayout` 존재 여부 확인. 2. Snackbar 내부 텍스트, 액션 버튼 텍스트 등을 UI 트리에서 찾아 검증. 3. Robolectric 스케줄러로 타이머와 애니메이션을 진행시켜 자동 사라짐 동작 확인. 4. 액션 버튼 클릭 시 리스너가 올바르게 동작하는지 `performClick()`으로 테스트. 5. 필요 시 테스트 환경에 맞게 라이브러리 버전과 스케줄러 동작을 조정. 이 과정을 거치면 Robolectric에서도 Snackbar UI와 동작을 적절히 검증할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기