상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Robolectric에서 Context 객체를 테스트하려면 어떻게 해야 하나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric은 Android 애플리케이션을 JVM 환경에서 실행할 수 있게 해주는 테스트 프레임워크로, 안드로이드 컴포넌트와 API를 상당 부분 모킹(mocking)하여 빠르고 안정적인 단위 테스트를 가능하게 합니다. 특히, 안드로이드의 `Context` 객체와 같은 프레임워크 종속적인 클래스를 테스트할 때 매우 유용합니다. Robolectric에서 `Context` 객체를 테스트하기 위한 기본적인 접근 방법과 주의점은 다음과 같습니다. 1. RobolectricTestRunner 사용하기 테스트 클래스에 `@RunWith(RobolectricTestRunner.class)` <a href='https://sangseek.com/sangseeks/어노테이션/ko'>어노테이션</a>을 지정하면, Robolectric이 JVM상에서 안드로이드 환경을 시뮬레이트하며 테스트를 수행합니다. 이렇게 하면 `Context` 객체를 포함해 다양한 안드로이드 컴포넌트들을 사용할 수 있습니다. 2. Application Context 얻기 테스트 중에 `Context`가 필요하다면 `RuntimeEnvironment.getApplication()` 메서드를 사용하여 Application Context를 얻을 수 있습니다. 예: ```java Context context = RuntimeEnvironment.getApplication(); ``` 이 Context는 실제 앱의 `Application` 인스턴스와 유사하게 동작합니다. 3. Activity Context 얻기 (필요한 경우) 특정 Activity와 연결된 Context가 필요하면 `Robolectric.buildActivity(SomeActivity.class).create().get()`을 통해 Activity를 생성하고, 그 Activity의 Context를 얻을 수 있습니다. ```java SomeActivity activity = Robolectric.buildActivity(SomeActivity.class).create().start().resume().get(); Context context = activity; ``` 4. 리소스 접근 테스트 <a href='https://sangseek.com/sangseeks/로컬화/ko'>로컬화</a> 문자열, 드로어블 리소스, 레이아웃 등 리소스에 접근해야 하는 경우 위에서 얻은 Context로 다음처럼 테스트할 수 있습니다. ```java String a<a href='https://sangseek.com/sangseeks/ppName/ko'>ppName</a> = context.getString(R.string.app_name); assertThat(appName).isEqualTo("MyApp"); ``` 5. Context 기반 컴포넌트 테스트 예를 들어, SharedPreferences, AlarmManager, NotificationManager와 같이 Context를 통해 얻는 시스템 서비스들도 그대로 사용할 수 있습니다. ```java SharedPreferences prefs = context.getSharedPreferences("test_prefs", Context.MODE_PRIVATE); prefs.edit().putString("key", "value").commit(); assertEquals("value", prefs.getString("key", null)); ``` 6. 테스트 시 주의사항 - Robolectric은 안드로이드 프레임워크를 완벽하게 재현하지는 못합니다. 따라서 아주 복잡한 네이티브 코드나 특정 하드웨어 의존성은 테스트가 어려울 수 있습니다. - `Application`을 커스터마이징 하는 경우, `@Config(application = MyTestApplication.class)` 같은 어노테이션을 활용하여 테스트용 애플리케이션 클래스를 지정할 수 있습니다. - `Shadow` 클래스를 적절히 활용하면 `Context`와 관련된 기능들을 좀 더 상세히 제어하거나 확인할 수 있습니다. 7. 예제 테스트 코드 ```java @RunWith(RobolectricTestRunner.class) public class MyContextTest { @Test public void testGetStringFromContext() { Context context = RuntimeEnvironment.getApplication(); String actual = context.getString(R.string.my_string); assertEquals("Expected String", actual); } @Test public void testSharedPreferences() { Context context = RuntimeEnvironment.getApplication(); SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE); prefs.edit().putInt("number", 42).commit(); int number = prefs.getInt("number", -1); assertEquals(42, number); } } ``` --- 요약하면, Robolectric 환경에서는 `RuntimeEnvironment.getApplication()`으로 Application Context를 얻거나, 필요한 경우 Activity를 빌드하여 Context를 획득합니다. 이를 통해 리소스, SharedPreferences 등 Context 기반 API를 JVM 내에서 테스트할 수 있습니다. RobolectricTestRunner를 통해 안드로이드 시스템을 모방하므로 실제 장치나 에뮬레이터 없이도 효과적으로 Context 관련 기능을 검증할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기