상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
디저트의 식감에 따라 사용하는 재료는?
독립 전쟁에서의 주요 전투 중 하나인 길포드 전투의 결과는 무엇이었나요?
독립 선언의 서명식은 어떻게 진행되었나요?
전쟁 중에 어떤 국가가 가장 많은 자원을 소모했나요?
제1차 세계 대전에서의 전쟁 포로의 처우는 어땠나요?
수정헌법 제10조는 어떤 내용을 담고 있나요?
베트남 전쟁에서의 '전쟁의 인적 비용'은 얼마나 되었나요?
코나 커피의 향은 어떤가요?
코나 커피의 인증 마크는 무엇이 있나요?
바이오메트릭스 기술의 미래는 어떻게 될까요?
바이오메트릭스 기술의 사용자 인터페이스 디자인은 어떻게 이루어져야 하나요?
15세기에는 어떤 중요한 탐험이 이루어졌나요?
Previous
Next
수정하기 - Robolectric에서 PreferenceActivity를 테스트하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric은 안드로이드 UI 컴포넌트나 액티비티를 JVM 환경에서 에뮬레이션하여 빠르게 단위 테스트를 수행할 수 있게 해주는 프레임워크입니다. 일반적인 Activity나 Fragment는 Robolectric으로 쉽게 테스트할 수 있지만, PreferenceActivity나 PreferenceFragment는 별도의 설정이나 주의가 필요합니다. 특히 PreferenceActivity는 기본적으로 설정 스크린을 구성하는데, Preference XML 리소스를 로드하고, 그 안의 Preference 객체를 조작하며 상태를 검증하는 방식으로 테스트하게 됩니다. 아래는 Robolectric에서 PreferenceActivity를 테스트하는 구체적인 접근 방법과 팁을 정리한 내용입니다. --- 1. PreferenceActivity, PreferenceFragment 구조 이해하기 - `PreferenceActivity` 는 안드로이드에서 설정 화면용 액티비티입니다. - 보통 API 레벨에 따라 `PreferenceFragment` 또는 `PreferenceFragmentCompat`을 같이 사용합니다. - Preference들은 XML 리소스(예: `R.xml.preferences`)로 정의하고, `addPreferencesFromResource()` 같은 메서드로 로드합니다. --- 2. Robolectric 테스트 클래스 준비 - 테스트는 JUnit 4 스타일로 작성합니다. - `@RunWith(RobolectricTestRunner.class)`를 붙여 Robolectric 테스트임을 명시합니다. - SDK 버전은 `@Config` 어노테이션으로 지정 가능하며, 로컬 환경에 맞춰 설정합니다. ```java @RunWith(RobolectricTestRunner.class) @Config(sdk = Build.VERSION_CODES.P) // 예: API 28 public class MyPreferenceActivityTest { // ... } ``` --- 3. PreferenceActivity 인스턴스 생성 및 생명주기 실행 - Robolectric의 `Robolectric.buildActivity()` 메서드를 사용해 액티비티 인스턴스를 생성하고 `create()`, `start()`, `resume()` 같은 라이프사이클 메서드를 호출해 실제 동작하는 환경을 만듭니다. ```java MyPreferenceActivity activity = Robolectric.buildActivity(MyPreferenceActivity.class) .create() .start() .resume() .get(); ``` - 이렇게 해야 `onCreate()` 내에서 `addPreferencesFromResource()` 실행되고, Preference 화면이 초기화됩니다. --- 4. Preference 객체 접근 및 검증 방법 - `PreferenceActivity`에서 `getPreferenceScreen()` 메서드를 이용해 `PreferenceScreen` 객체를 얻고, 그 아래 `Preference`들을 계층적으로 조회합니다. - 각 Preference를 key 값을 통해 `findPreference("key")`로 가져올 수 있습니다. 예시: ```java PreferenceScreen screen = activity.getPreferenceScreen(); Preference preference = screen.findPreference("example_key"); ``` - 혹은 직접 액티비티 내 `findPreference()` 메서드를 호출해도 됩니다. --- 5. Preference 클릭 및 상태 변경 시뮬레이션 - Preference 클릭은 `Preference.performClick()` 메서드를 이용해 시뮬레이트할 수 있습니다. - Preference 상태(예: CheckBoxPreference 체크 여부)는 직접 조작하거나 `getSharedPreferences()`로 읽어서 검증합니다. - 만약 preference 변경에 따른 이벤트 처리 로직이 있다면, 클릭 후 그 동작이 제대로 수행됐는지 검증하는 통합테스트도 가능합니다. 예: ```java CheckBoxPreference checkBoxPref = (CheckBoxPreference) preference; assertFalse(checkBoxPref.isChecked()); checkBoxPref.performClick(); assertTrue(checkBoxPref.isChecked()); ``` --- 6. PreferenceManager, SharedPreferences 초기화 (필요 시) - 테스트가 실행될 때 SharedPreferences가 초기화되지 않아 Preference 상태가 꼬일 수 있습니다. - `PreferenceManager.setDefaultValues()` 를 테스트 시작 전에 호출하거나, - `ShadowPreferenceManager.reset()` (Robolectric 내 설정 관리 Shadow 객체 활용)을 이용해 초기 상태를 맞출 수 있습니다. --- 7. PreferenceFragment / PreferenceFragmentCompat 테스트 - 만약 `PreferenceActivity` 대신 `PreferenceFragment`를 쓰는 구조라면, - Robolectric에서 `FragmentController`를 이용해 프래그먼트를 생성 및 생명주기 호출하는 방식으로 진행합니다. ```java PreferenceFragment fragment = new MyPreferenceFragment(); FragmentController<PreferenceFragment> controller = FragmentController.of(fragment); controller.create().start().resume().visible(); ``` - 이후 `fragment.findPreference("key")`로 Preference 객체에 접근 후 검증합니다. --- 8. 주의사항 및 팁 - Robolectric은 완벽한 에뮬레이터는 아니므로, 특별히 커스텀 Preference 또는 복잡한 UI는 실제 디바이스에서 검증도 병행해야 합니다. - Preference XML 내 불필요한 네임스페이스 문제, 아이디 충돌, 최신 API 호환성을 주의합니다. - `PreferenceActivity`는 API 레벨에 따라 지원 및 사용 방법이 달라질 수 있으므로 빌드 타겟과 테스트 SDK 버전을 일치시키는 게 좋습니다. - `AppCompat` 라이브러리 사용 시, `PreferenceFragmentCompat`와 함께 테스트 하는 게 더 현대적인 방법입니다. --- 요약 - Robolectric 테스트 내에서 `PreferenceActivity`를 `buildActivity()`로 생성하고, 생명주기 메서드 호출해 초기화. - `getPreferenceScreen()` 또는 `findPreference()`로 xml에 정의한 Preference 객체 접근. - `performClick()` 등으로 사용자 인터랙션 모방. - `SharedPreferences` 상태 확인 또는 직접 Preference 속성 검증. - 복잡할 경우 `PreferenceFragment`의 경우엔 `FragmentController`를 이용해 프래그먼트 생명주기 호출. - SDK 버전, 라이브러리 호환성을 체크. ---- 이렇게 하면 Robolectric 환경에서 `PreferenceActivity` <a href='https://sangseek.com/sangseeks/기반 설정/ko'>기반 설정</a> 화면 로직을 효과적으로 단위 테스트할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기