상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Robolectric에서 Activity를 어떻게 테스트하나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric은 안드로이드 컴포넌트를 JVM 환경에서 테스트할 수 있도록 도와주는 프레임워크입니다. <a href='https://sangseek.com/sangseeks/실제/ko'>실제</a> 디바이스나 에뮬레이터 없이도 안드로이드 Activity를 실행하고 생명주기를 제어할 수 있어, 단위 테스트에 매우 유용합니다. Robolectric으로 Activity를 테스트하는 기본적인 방법과 주요 개념을 다음과 같이 자세히 설명드리겠습니다. --- 1. Robolectric 의존성 추가 먼저 테스트 모듈(build.gradle)에 Robolectric 의존성을 추가해야 합니다. 일반적으로 다음과 같이 추가합니다: ```gradle testImplementation "org.robolectric:robolectric:4.10" // 최신 버전에 맞게 조절하세요 testImplementation "junit:junit:4.13.2" ``` --- 2. 기본 테스트 클래스 구성 테스트 클래스에는 JUnit의 `@RunWith(RobolectricTestRunner.class)` 어노테이션을 추가해서 Robolectric 환경에서 실행되도록 합니다. ```java @RunWith(RobolectricTestRunner.class) public class MainActivityTest { // 테스트 코드 작성 } ``` --- 3. Activity 생성 및 생명주기 제어 Robolectric에서는 `Robolectric.buildActivity(ActivityClass.class)`를 이용해 Activity를 빌드하고, `.create()`, `.start()`, `.resume()`, `.visible()` 등의 메소드를 연결하여 Activity 생명주기를 시뮬레이션할 수 있습니다. 예를 들어 `MainActivity`를 테스트한다고 하면: ```java ActivityController<MainActivity> controller = Robolectric.buildActivity(MainActivity.class); MainActivity activity = controller.create().start().resume().visible().get(); ``` - `.create()` : onCreate() 호출 - `.start()` : onStart() 호출 - `.resume()` : onResume() 호출 - `.visible()` : 윈도우가 화면에 보이게 됨(onWindowFocusChanged 등 트리거) - `.get()` : 실제 Activity 인스턴스를 리턴 필요에 따라 원하는 생명주기 시점까지만 호출해도 되고, 한 번에 chained 호출도 가능합니다. --- 4. U<a href='https://sangseek.com/sangseeks/I 요소/ko'>I 요소</a> 접근 및 검증 `activity.findViewById(R.id.뷰아이디)`를 통해 UI 요소를 가져올 수 있으며, UI 상태 변경이나 텍스트, 클릭 이벤트 등을 검사할 수 있습니다. 예: ```java <a href='https://sangseek.com/sangseeks/TextView/ko'>TextView</a> tv = activity.findViewById(R.id.textView); assertEquals("Hello, Robolectric!", tv.getText().toString()); ``` --- 5. 이벤트 시뮬레이션 버튼 클릭 같은 이벤트도 다음과 같이 직접 호출하거나 Robolectric의 `ShadowView` 등을 이용해 시뮬레이션할 수 있습니다. ```java Button button = activity.findViewById(R.id.button); button.performClick(); // 클릭 시의 변화가 제대로 일어났는지 검증 ``` 또는 Intent나 메뉴 이벤트도 수동으로 호출 가능합니다. --- 6. Intent 테스트 Activity가 특정 인텐트를 받거나 보낼 때는 다음과 같이 인텐트를 만들어 빌드 단계에서 전달할 수 있습니다. ```java Intent intent = new Intent(RuntimeEnvironment.getApplication(), MainActivity.class); intent.putExtra("key", "value"); ActivityController<MainActivity> controller = Robolectric.buildActivity(MainActivity.class, intent); MainActivity activity = controller.create().start().resume().get(); ``` --- 7. Activity 종료와 상태 저장 테스트 `controller.pause()`, `controller.stop()`, `controller.destroy()` 로 Activity의 생명주기 종료 단계를 테스트할 수 있습니다. 또한 `controller.saveInstanceState()`를 통해 상태 번들을 받아 `onSaveInstanceState()` 콜백을 테스트하거나, 저장된 상태를 넣고 다시 Activity를 생성할 수 있습니다. --- 8. 테스트 예시 코드 전체 ```java @RunWith(RobolectricTestRunner.class) public class MainActivityTest { private MainActivity activity; @Before public void setup() { activity = Robolectric.buildActivity(MainActivity.class) .create() .start() .resume() .visible() .get(); } @Test public void testTextViewText() { TextView tv = activity.findViewById(R.id.textView); <a href='https://sangseek.com/sangseeks/assertNotNull/ko'>assertNotNull</a>(tv); assertEquals("Hello, Robolectric!", tv.getText().toString()); } @Test public void testButtonClick_changesText() { Button button = activity.findViewById(R.id.button); TextView tv = activity.findViewById(R.id.textView); button.performClick(); assertEquals("Clicked!", tv.getText().toString()); } } ``` --- 정리 - Robolectric 환경에서 `RobolectricTestRunner`를 이용해 테스트 클래스 선언 - `Robolectric.buildActivity()`로 ActivityController를 얻고 생명주기 시뮬레이션 - `get()`으로 실제 Activity 인스턴스를 구해 UI 요소에 접근 - `findViewById()`, `performClick()` 등으로 UI 조작 및 상태 검증 - Intent 전달도 가능하며 생명주기 종료 단계도 테스트 가능 이렇게 하면 실제 디바이스나 에뮬레이터를 사용하지 않고 로컬 JVM 환경에서 빠르게 Activity 동작을 검증할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기