상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
유배와 추방의 차이는 무엇인가요?
유배의 역사적 변천사는 어떻게 되나요?
유배 중의 외로움은 어떻게 극복했나요?
프랑스 은행의 고객 세분화 기준은 무엇인가요?
"파운드스 포돈리스"는 어떤 의미인가요?
3월에 가면 좋은 역사적인 장소는?
3월에 추천하는 여행 패키지는?
3월에 가기 좋은 자생식물원은?
5월에 가볼 만한 축제나 행사에는 어떤 것들이 있나요?
5월에 추천하는 여행 관련 팟캐스트는?
4월에 여행할 때의 안전 수칙은?
4월에 여행할 때의 지역 주민과의 소통 방법은?
Previous
Next
수정하기 - Robolectric에서 Locale을 설정하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric 테스트 환경에서 <a href='https://sangseek.com/sangseeks/Locale/ko'>Locale</a>(지역 설정)을 변경하는 방법은 여러 가지가 있지만, 주로 테스트 실행 전에 혹은 테스트 메서드 내에서 명시적으로 Locale을 설정해주어야 합니다. 이렇게 해야 애플리케이션 코드가 특정 Locale에 따라 동작할 때, 의도한 Locale 환경에서 잘 동작하는지 검증할 수 있습니다. Robolectric에서 Locale을 설정하는 주요 방법은 다음과 같습니다. 1. `Locale.setDefault()` 사용하기 가장 간단한 방법은 자바의 표준 `Locale.setDefault(Locale)` 메서드를 이용해 JVM 전체의 기본 Locale을 변경하는 것입니다. Robolectric 테스트는 JVM 내에서 실행되므로, 이 설정은 테스트 코드가 실행되는 동안 기본 Locale로 적용됩니다. ```java @Test public void testSomethingWithKoreanLocale() { Locale defaultLocale = Locale.getDefault(); try { Locale.setDefault(Locale.KOREAN); // 여기서 <a href='https://sangseek.com/sangseeks/로케일/ko'>로케일</a>에 민감한 로직 검증 } finally { Locale.setDefault(defaultLocale); // 테스트 후 원래대로 복구 } } ``` 이렇게 하면 애플리케이션에서 `Locale.getDefault()`로 얻는 Locale이 변경되어 테스트를 원하는 언어/국가 환경에서 수행할 수 있습니다. 2. Robolectric의 `RuntimeEnvironment`에서 Context의 Resources Locale 변경 Android 애플리케이션에서 Locale 설정은 `Context`의 `Resources.Configuration`에 저장됩니다. Robolectric 테스트 코드 안에서 컴포넌트들이 사용하는 `Context`의 Locale을 변경해주는 방법도 있습니다. ```java @Before public void setUp() { Locale locale = Locale.FRANCE; // 예: 프랑스 Locale 설정 Locale.setDefault(locale); Configuration config = RuntimeEnvironment.getApplication().getResources().getConfiguration(); config.setLocale(locale); RuntimeEnvironment.getApplication().getResources().updateConfiguration(config, RuntimeEnvironment.getApplication().getResources().getDisplayMetrics()); } ``` 이렇게 하면 애플리케이션 내에서 `context.getResources().getConfiguration().locale`이 변경되어서, 내부에서 `Resources` 기반의 Locale 조회가 원하는 Locale로 작동합니다. 3. API 24 이상 (Android 7.0, Nougat) 대응하기 Android 7.0 이상부터는 `Configuration` 클래스가 `setLocale(Locale)`과 `setLocales(LocaleList)` 메서드를 지원하는데, Robolectric 역시 이 API를 지원합니다. 따라서 API 24 이상을 대상으로 한다면 다음과 같이 설정할 수 있습니다. ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { Configuration configuration = RuntimeEnvironment.getApplication().getResources().getConfiguration(); configuration.setLocale(locale); LocaleList localeList = new LocaleList(locale); LocaleList.setDefault(localeList); configuration.setLocales(localeList); RuntimeEnvironment.getApplication().getResources().updateConfiguration(configuration, RuntimeEnvironment.getApplication().getResources().getDisplayMetrics()); } ``` 4. Application 클래스 또는 Test Runner에서 기본 Locale 설정 여러 테스트 클래스에서 공통적으로 Locale을 바꾸고 싶다면, 커스텀 Test Runner 또는 `@BeforeClass` 메서드에서 `Locale.setDefault()`와 `Resources`의 configuration 변경을 한 번에 해줘도 됩니다. 5. 주의할 점 - `Locale.setDefault()`는 JVM 전체의 기본 Locale 값을 바꾸므로 다른 테스트에 영향을 줄 수 있습니다. 따라서 테스트 끝나고 원래대로 되돌리는 작업이 중요합니다. - Robolectric의 `RuntimeEnvironment.getApplication()`은 테스트 대상의 Context를 반환하므로 Locale 정보가 여기에 저장되어 있습니다. - Android Framework에서는 `Resources`의 `Configuration` 객체를 직접 조작하는 방식이 가장 확실합니다. - Robolectric의 버전이나 Android SDK 버전에 따라 `updateConfiguration` 등 API 사용법이 다소 달라질 수 있으므로 해당 버전에 맞게 적용하는 것이 좋습니다. --- 요약하자면 , Robolectric에서 Locale을 설정할 때는 테스트 코드 내에서 JVM의 기본 Locale을 바꾸고(`Locale.setDefault()`), 동시에 애플리케이션 Context의 리소스 구성(`Resources.Configuration`)에서 Locale을 변경하는 것이 일반적인 방법입니다. 이렇게 하면 테스트 중에 Locale에 따라 동작하는 코드가 일관된 Locale 설정 하에 실행됩니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기