ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 모듈 간 테스트 코드 공유하기 (Android Test Fixtures)
    Android 2025. 10. 26. 20:51

    OKR (Objective & Key Results)

    Objective:
    Android Gradle의 testFixtures 기능을 이해하고,
    모듈 간 테스트 유틸과 더블(mock) 코드를 재사용할 수 있도록 한다.

    Key Results:

    • testFixtures.enable = true의 역할을 명확히 설명할 수 있다.
    • src/testFixtures 디렉토리를 구성해 공용 테스트 코드를 작성할 수 있다.
    • 다른 모듈에서 testFixtures를 불러오는 방법을 직접 적용할 수 있다.

    Test Fixtures란?

    테스트를 작성하다 보면 여러 테스트에서 공통으로 사용하는 코드가 생긴다.

    예를 들어 다음과 같은 코드들이다.

    • 테스트용 유틸리티 클래스
    • 더미 데이터 생성기
    • Mock 객체
    • 공용 테스트 헬퍼

    이런 코드를 src/test/java에 넣으면 해당 모듈 안에서만 접근할 수 있다.
    다른 모듈의 테스트에서는 사용할 수 없다.

    이 문제를 해결하기 위해 Gradle은 Test Fixtures라는 기능을 제공한다.
    Test Fixtures는 테스트 전용 공용 코드 영역으로, 앱 빌드에는 포함되지 않지만 테스트 코드에서는 모듈 간 공유가 가능하다.


    Test Fixtures 디렉토리 구조

    Test Fixtures를 활성화하면 다음과 같은 디렉토리 구조를 사용할 수 있다.

     
    my-module/ └── src/ ├── main/ ├── test/ ├── androidTest/ └── testFixtures/ ← 공용 테스트 코드 작성 위치

    Gradle 설정 방법

    모듈의 build.gradle.kts 파일에 다음을 추가한다.

     
    android { namespace = "com.linecorp.line.cms.popup.data" resourcePrefix = "cms_popup_" // Test Fixtures 활성화 testFixtures.enable = true }

    이 설정을 추가하면 Gradle이 자동으로 src/testFixtures 디렉토리를 인식한다.
    이 디렉토리 안의 코드는 테스트 시점에만 사용 가능하며, 릴리즈 빌드에는 포함되지 않는다.


    다른 모듈에서 사용하는 방법

    다른 모듈에서 testFixtures 코드를 가져오려면 다음처럼 의존성을 추가한다.

     
    dependencies { testImplementation(testFixtures(project(":core"))) }

    이제 core 모듈의 src/testFixtures 안에 있는 코드를
    현재 모듈의 테스트 코드에서 직접 사용할 수 있다.


    사용 예시

    예를 들어, core 모듈에 테스트용 Fake Repository를 추가한다고 하자.

     
    // core/src/testFixtures/java/com/example/testutils/FakeUserRepository.kt package com.example.testutils class FakeUserRepository { fun getFakeUser() = "TestUser" }

    이제 다른 모듈(feature-login)에서 이를 불러와 사용할 수 있다.

     
    // feature-login/src/test/java/com/example/feature_login/LoginViewModelTest.kt package com.example.feature_login import com.example.testutils.FakeUserRepository import org.junit.Test import kotlin.test.assertEquals class LoginViewModelTest { @Test fun testFakeUser() { val repo = FakeUserRepository() assertEquals("TestUser", repo.getFakeUser()) } }

    이처럼 testFixtures를 이용하면 공용 테스트 코드를 중복 없이 재사용할 수 있다.


    정리

    항목설명
    역할 모듈 간 테스트 유틸, 더블, 헬퍼 코드 공유
    디렉토리 src/testFixtures/java
    활성화 android { testFixtures.enable = true }
    의존 추가 testImplementation(testFixtures(project(":module")))
    앱 빌드 포함 여부 포함되지 않음 (테스트 전용)

    결론

    testFixtures는 테스트 코드의 재사용성을 높이고 유지보수를 단순화하는 기능이다.
    테스트 유틸이나 Mock 객체가 여러 모듈에 흩어져 있다면,
    testFixtures.enable = true 설정을 추가해 공용 테스트 구조를 정리하는 것이 좋다.

Designed by Tistory.