상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Robolectric에서 커스텀 Toast 메시지를 어떻게 테스트하나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
<a href='https://sangseek.com/sangseeks/Robolectric/ko'>Robolectric</a>은 안드로이드의 UI 컴포넌트들을 JVM에서 실행할 수 있도록 해주어, 실제 디바이스나 에뮬레이터 없이도 빠르게 유닛 테스트를 할 수 있게 도와주는 프레임워크입니다. 기본 Toast 메시지의 테스트는 간단하지만, 커스텀 Toast를 사용하는 경우에는 조금 더 신경 쓸 부분이 있습니다. 아래에 Robolectric에서 커스텀 Toast 메시지를 테스트하는 방법을 단계별로 설명합니다. --- 1. 커스텀 Toast의 구조 이해하기 커스텀 Toast는 일반 Toast처럼 `Toast.makeText()`를 사용하는 대신, 다음과 같이 자신만의 레이아웃을 인플레이트하거나 별도의 뷰를 설정한 후에 `toast.setView(customView)`를 호출하는 형태로 구현됩니다. 예시: ```java Toast toast = new Toast(context); View customView = LayoutInflater.from(context).inflate(R.layout.custom_toast_layout, null); toast.setView(customView); toast.setDuration(Toast.LENGTH_SHORT); toast.show(); ``` --- 2. Robolectric에서 Toast의 기본적인 접근 방식 - Robolectric은 `ShadowToast`라는 클래스를 제공해서 최근에 "show" 된 Toast를 검사할 수 있게 해줍니다. - 기본 Toast 테스트에서 `ShadowToast.getShownToast()`를 사용하면 마지막으로 보여진 Toast 객체를 가져오거나, `ShadowToast.getTextOfLatestToast()`로 텍스트를 바로 확인할 수 있습니다. 하지만 커스텀 Toast에서는 메인 컨텐츠가 텍스트뷰가 아닌 별도의 뷰 / 레이아웃이기 때문에 `ShadowToast.getTextOfLatestToast()` 같은 간단한 메서드는 동작하지 않습니다. --- 3. 커스텀 Toast 메시지 테스트 방법 (1) Toast 인스턴스 가져오기 - `ShadowToast.getShownToast()` 또는 `ShadowToast.getLatestToast()`를 통해 최근 보여진 Toast 객체를 받습니다. - 이 Toast 객체는 실제 `Toast` 인스턴스이므로 커스텀 뷰를 직접 조회할 수 있습니다. (2) 커스텀 Toast 내부 뷰 가져오기 - Toast에 설정된 커스텀 뷰는 `toast.getView()`로 접근할 수 있습니다. - 이후 `getView()`로 가져온 뷰 내에서 ID를 통해 하위 뷰를 찾아내고, 필요한 프로퍼티나 텍스트를 확인할 수 있습니다. 예시: ```java Toast toast = ShadowToast.getLatestToast(); View toastView = toast.getView(); TextView textView = toastView.findViewById(R.id.custom_text); String toastText = textView.getText().toString(); assertEquals("원하는 텍스트", toastText); ``` (3) 다른 커스텀 속성 검사 - 텍스트뿐 아니라 이미지, 배경색, 폰트 스타일 등도 `toastView` 내부에서 관련 뷰를 찾아 접근 가능합니다. - 뷰의 상태나 속성을 assert 구문으로 검사하세요. --- 4. 주의할 점 - `Toast.show()` 메서드는 실제로 UI 쓰레드에서 동작하는 시점에 Toast가 화면에 떠야 하는데, Robolectric은 이것을 Shadow로 감싸 가능합니다. - 따라서 `Toast.show()` 호출은 반드시 해야 검출됩니다. - 만약 테스트 중 Toast가 보이지 않는다면 `Toast.show()` 호출 여부를 확인하세요. - Robolectric 버전에 따라 ShadowToast API가 다소 다를 수 있으니 최신 문서를 참고하세요. --- 5. 샘플 테스트 코드 예시 ```java @RunWith(RobolectricTestRunner.class) public class CustomToastTest { private Context context; @Before public void setUp() { context = RuntimeEnvironment.application; } @Test public void testCustomToast() { // 커스텀 Toast 생성 Toast customToast = new Toast(context); View customView = LayoutInflater.from(context).inflate(R.layout.custom_toast_layout, null); TextView tv = customView.findViewById(R.id.custom_text); tv.setText("테스트 메시지"); customToast.setView(customView); customToast.setDuration(Toast.LENGTH_SHORT); customToast.show(); // ShadowToast에서 가져오기 Toast shownToast = ShadowToast.getLatestToast(); assertNotNull(shownToast); // 커스텀 뷰로부터 텍스트 추출 및 비교 View shownView = shownToast.getView(); assertNotNull(shownView); TextView shownTextView = shownView.findViewById(R.id.custom_text); assertEquals("테스트 메시지", shownTextView.getText().toString()); } } ``` --- 정리 - 커스텀 Toast는 기본 텍스트 추출 메서드가 적용되지 않으므로 Toast 인스턴스 내부의 커스텀 뷰를 직접 조회해야 합니다. - `ShadowToast.getLatestToast()`로 Toast 객체를 얻고 `getView()`로 뷰를 가져와, 뷰 내 뷰 ID를 통해 대상 뷰를 얻어내서 테스트하면 됩니다. - 뷰의 텍스트나 속성들을 직접 검증하는 방식으로 커스텀 Toast가 제대로 표시되는지 확인할 수 있습니다. - Robolectric의 `ShadowToast`를 활용하면 UI 없이도 Toast를 효과적으로 테스트할 수 있습니다. 이 방법을 통해 커스텀 뷰로 구현한 Toast 메시지에 대한 유닛 테스트를 안정적으로 작성할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기