상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
라식 수술의 적합성에 대한 의사의 의견을 어떻게 참고하나요?
라식 수술을 위한 최신 장비와 기술은 어떤 것이 있나요?
라식 수술의 최신 동향을 알기 위한 방법은 무엇인가요?
녹내장 예방을 위한 정기 검진의 중요성은 무엇인가요?
저작권 보호 기간은 얼마나 되나요?
국제 저작권 협약에서 공정 사용 규정은 어떻게 되나요?
기업의 로고와 상표의 저작권 문제는 어떻게 해결하나요?
단백질과 철분의 상호작용은 무엇인가요?
제니퍼 APM에서 자바 애플리케이션의 성능 이상을 감지하는 경고를 설정하는 방법은?
자바에서 자동 박싱(Auto-Boxing)이란 무엇인가요?
자바에서 LocalDate와 LocalTime 클래스의 차이점은?
ASML의 기술이 자율 주행차 산업에 미치는 영향은 무엇인가요?
Previous
Next
수정하기 - Robolectric에서 방해받지 않는 테스트를 작성하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric은 Android 앱의 단위 테스트를 JVM 환경에서 실행할 수 있도록 도와주는 테스트 프레임워크로, 실제 디바이스나 에뮬레이터 없이 빠르게 테스트를 수행할 수 있다는 장점이 있습니다. 하지만 Robolectric을 활용하면서 외부 환경, 안드로이드 시스템 상태, 혹은 의존성 때문에 테스트가 방해받거나 불안정해질 수 있는데, 이러한 문제를 최소화하고 방해받지 않는 테스트를 작성하는 방법들을 다음과 같이 정리할 수 있습니다. --- 1. 테스트 격리(Isolation) 유지하기 - 의존성 최소화 및 분리 테스트 코드가 외부 서버, 데이터베이스, 파일 시스템 등 실제 리소스에 의존하지 않도록 한다. 네트워크 호출, 데이터베이스 접근 등은 가짜(mock) 혹은 더미(fake) 객체로 대체하고, 안드로이드 시스템 의존도 역시 최대한 분리해야 한다. - 의존성 주입 사용 Dagger, Hilt 같은 DI 프레임워크로 의존성을 주입하면, 테스트 시 모킹(mocking) 객체를 주입하기 쉽다. 이를 통해 테스트 대상 클래스가 외부 상태에 의존하지 않게 된다. --- 2. Robolectric 환경에 맞도록 테스트 설계하기 - AndroidManifest 의존 줄이기 Robolectric은 기본적으로 AndroidManifest.xml을 로드하여 리소스, 컴포넌트들을 인식한다. 불필요한 권한, 서비스, 리시버 등은 매니페스트에서 제외하거나 오버라이드하여 테스트에 방해되지 않도록 한다. - Robolectric API 활용 로케일(<a href='https://sangseek.com/sangseeks/Locale/ko'>Locale</a>), 시간대, 리소스 등 안드로이드 환경을 조작할 수 있는 Robolectric API를 활용해 테스트 환경을 컨트롤하면, 외부 상태에 의한 방해를 줄일 수 있다. - SDK 버전 명확하게 지정 `@Config(sdk = X)` 어노테이션으로 테스트할 안드로이드 SDK 버전을 명시하여 SDK 간 차이로 인한 테스트 실패를 방지한다. --- 3. UI 테스트는 진짜 UI 쓰지 않기 - Robolectric은 화면 렌더링을 실제로 수행하지 않는다. 따라서 UI 위젯 상태만 확인하고 복잡한 애니메이션, 화면 전환 등은 실제 디바이스 테스트(<a href='https://sangseek.com/sangseeks/Instrumentation/ko'>Instrumentation</a> Test)로 분리한다. - UI 이벤트 시뮬레이션도 `Shadow` 객체 등 Robolectric이 제공하는 도구를 사용해 단위 테스트 수준에서 동작을 재현한다. --- 4. 테스트 데이터 준비 명확히 하기 - 테스트마다 초기 상태(SharedPreferences, DB, 파일 등)를 명확히 초기화하고 인위적인 데이터나 상태를 미리 설정해서 환경에 따라 결과가 달라지지 않도록 한다. - `@Before`와 `@After` 메서드로 테스트 전후 환경 정리 작업을 명확히 수행한다. --- 5. Concurrency 및 비동기 처리 주의 - Robolectric 테스트는 JVM에서 실행되므로 안드로이드의 멀티스레딩, 핸들러 등이 실제와 다르게 동작할 수 있다. 이에 대비해 `ForegroundThreadScheduler` 나 `Robolectric.flushForegroundThreadScheduler()` 등을 사용해 비동기 작업을 강제로 진행시켜 테스트 결과를 안정화한다. --- 6. Shadow 객체의 적절한 활용과 주의 - Robolectric의 `Shadow` 객체는 안드로이드 프레임워크 객체를 대체하여 동작을 모킹해준다. 복잡한 동작이나 호출 결과를 Shadow로 오버라이드해 정확히 원하는 상태를 재현한다. - 단, Shadow 객체가 충분히 최신 상태인지 확인하고 문제가 있으면 직접 커스텀 Shadow를 만들어 사용한다. --- 7. 외부 시스템(네트워크, DB 등) 모킹 - 가능하면 Retrofit, Room 등의 라이브러리에서 제공하는 테스트용 기능이나 mockWebServer 같은 툴을 사용해 외부 의존을 완전히 차단한다. - LiveData, RxJava 등 비동기 데이터 <a href='https://sangseek.com/sangseeks/스트림/ko'>스트림</a>도 테스트 시에는 `InstantTaskExecutorRule` 같은 룰을 적용해 동기 실행 형태로 바꿔 방해 요인을 줄인다. --- 8. 확실한 테스트 실패 요인 파악 - Robolectric 테스트 실패 시 메시지를 꼼꼼히 확인하고, 테스트 환경(로컬, CI) 차이나 버전 불일치 여부를 체크한다. - 필요하면 테스트를 세분화해서 어느 부분에서 환경 의존 문제가 발생하는지 좁혀 나간다. --- 요약 - 외부 의존성(네트워크, DB, 파일, 시스템 상태) 차단 및 모킹 - 의존성 주입 활용으로 테스트 코드 격리 - Robolectric 환경 설정(@Config 등) 명확히 지정 - Shadow 객체와 Robolectric API를 적극 활용해 시스템 상태 제어 - UI 복잡한 동작 대신 단순 상태 확인 - 테스트 전후 초기화 및 정리 철저 - 비동기 코드에 대한 특별 대처 이러한 원칙을 지켜서 Robolectric 테스트를 작성하면 테스트가 환경적 요인에 방해받지 않고 안정적으로 동작하며, 빠르게 테스트 주기를 갖는 효율적인 Android 단위 테스트를 만들 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기