상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Robolectric에서 Dagger Hilt와 함께 테스트하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric 테스트 환경에서 Dagger Hilt를 함께 사용하는 것은 Android의 <a href='https://sangseek.com/sangseeks/의존성 주입/ko'>의존성 주입</a>을 테스트에 통합할 때 매우 유용합니다. 하지만 Hilt는 기본적으로 Android Instrumented Test 환경을 대상으로 설계되어 있고, Robolectric은 JVM 환경에서 구동되기 때문에 몇 가지 설정과 준비 작업이 필요합니다. 아래는 Robolectric에서 Dagger Hilt를 함께 사용하는 방법을 단계별로 자세히 설명한 내용입니다. --- 1. 프로젝트 의존성 설정 먼저 Gradle에 필요한 의존성을 추가해야 합니다. - Hilt 의존성 (컴파일 및 테스트용) - Robolectric 및 관련 테스팅 라이브러리 예시 (app/build.gradle): ```gradle plugins { id 'com.android.application' id 'kotlin-android' id 'dagger.hilt.android.plugin' // ... } android { // ... testOptions { unitTests.includeAndroidResources = true // Robolectric에서 Android 리소스 사용 시 필요 } } dependencies { implementation "com.google.dagger:hilt-android:<version>" kapt "com.google.dagger:hilt-compiler:<version>" testImplementation 'junit:junit:4.13.2' testImplementation "org.robolectric:robolectric:<robolectric_version>" testImplementation "com.google.dagger:hilt-android-testing:<version>" kaptTest "com.google.dagger:hilt-compiler:<version>" // Optional: androidx.test core (Robolectric와 함께 쓰기도 함) testImplementation "androidx.test:core:1.4.0" } ``` > 여기서 `<version>` 과 `<robolectric_version>` 자리에는 최신 안정화 버전을 넣습니다. 그리고 Hilt Gradle 플러그인도 프로젝트의 최상단 `build.gradle`에 추가되어 있어야 합니다. --- 2. Hilt 테스트용 설정 및 애플리케이션 클래스로 지정 Hilt를 사용하는 앱에서는 보통 `@HiltAndroidApp`이 붙은 애플리케이션 클래스가 있습니다. 테스트 환경에서 Hilt가 작동하도록 하려면 테스팅용 애플리케이션 클래스를 만들고, Robolectric에 지정해줍니다. ```kotlin // Hilt용 애플리케이션 서브클래스 (테스트용) @HiltAndroidApp class HiltTestApplication : Application() ``` Robolectric 테스트 클래스에서 이 애플리케이션 클래스를 지정하기 위해, 테스트 클래스 위에 `@Config` 어노테이션으로 지정합니다. ```kotlin @HiltAndroidTest @RunWith(RobolectricTestRunner::class) @Config(application = HiltTestApplication::class) class MyTest { // ... } ``` --- 3. 테스트 클래스에 Hilt 초기화 및 룰 적용 Hilt의 테스트 룰(rule)을 적용하여 의존성 주입이 제대로 이루어지게 합니다. ```kotlin @HiltAndroidTest @RunWith(RobolectricTestRunner::class) @Config(application = HiltTestApplication::class) class MyTest { @get:Rule var hiltRule = HiltAndroidRule(this) @Before fun init() { hiltRule.inject() } @Test fun sampleTest() { // your test code } } ``` - `@HiltAndroidTest`: Hilt 테스트임을 명시 - `HiltAndroidRule`: 필드를 주입하거나 초기화 해주는 룰을 생성 - `hiltRule.inject()`: 테스트 전 의존성 주입 수행 --- 4. 필요한 Hilt 모듈 테스트용으로 대체하기 만약 테스트 중에 실제 모듈 대신 별도의 테스트용 모듈을 주입하고 싶다면, `@TestInstallIn`을 활용해 테스트 모듈을 정의해서 대체할 수 있습니다. 예: ```kotlin @Module @TestInstallIn( components = [SingletonComponent::class], replaces = [NetworkModule::class] ) object FakeNetworkModule { @Provides fun provideFakeService(): ApiService { return FakeApiService() } } ``` 이 모듈은 원래의 `NetworkModule` 대신 테스트 시 주입됩니다. --- 5. Robolectric 리소스 설정 Hilt는 Android 리소스를 참조할 때가 있는데, Robolectric에서 이를 활용하도록 위에서 보았듯 `testOptions { unitTests.includeAndroidResources = true }` 설정이 필요합니다. 또, Robolectric은 AndroidManifest.xml 및 res 폴더를 잘 인식하도록 프로젝트 구조가 표준이어야 하고, `@Config`에서 manifest와 res 경로를 명시해줄 수도 있습니다. --- 6. 주의사항 및 팁 - Hilt와 Robolectric은 JVM 테스트 환경에서 돌아가므로, 최신 버전의 두 라이브러리를 사용하는 것이 호환성에 도움이 됩니다. - `@HiltAndroidTest`는 Hilt 컴포넌트를 생성해주기 때문에 반드시 붙여야 하며, 그렇지 않으면 주입이 작동하지 않습니다. - Robolectric 테스트는 Android Instrumented 테스트보다 빠르지만, 완벽하게 동일한 환경은 아니므로 진짜 장치나 에뮬레이터에서 따로 Instrumented 테스트도 수행해야 합니다. - 복잡한 의존성 주입 계층이나 Activity, Fragment 주입 등에서는 Hilt가 주입하는 컴포넌트가 잘 초기화되는지 `HiltAndroidRule`를 통한 초기화가 필수입니다. - KSAnnotaionProcessor(kapt)가 제대로 작동해야 하므로 `kapt` 설정이 올바른지 확인합니다. --- 종합 요약 1. Hilt와 Robolectric 관련 의존성 추가 2. 테스트용 `@HiltAndroidApp` 애플리케이션 클래스 생성 3. 테스트 클래스에 `@HiltAndroidTest`, `@RunWith(RobolectricTestRunner::class)`, `@Config(application = HiltTestApplication::class)` 어노테이션 추가 4. `HiltAndroidRule` 선언 및 `hiltRule.inject()` 호출 5. 필요시 테스트용 모듈을 `@TestInstallIn`으로 정의하여 실제 모듈 대체 6. `testOptions`에서 `includeAndroidResources = true` 설정 7. 최신 버전 라이브러리를 사용하고 빌드 환경 점검 이렇게 설정하면, Robolectric 환경에서 Hilt 의존성 주입이 정상 작동하는 테스트를 작성할 수 있습니다. --- 추가로, Google 공식 문서(https://dagger.dev/hilt/testing.html)에서도 `@HiltAndroidTest`와 `HiltAndroidRule`을 함께 사용해 Instrumented 및 Robolectric 테스트에 Hilt를 적용하는 방법을 안내하고 있으니 참고하면 좋습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기