📘

【Android】Local、Instrumentationテスト間でファイル共有したい

2024/11/04に公開

概要

Androidでテストコードを書く際にData生成用のFactoryクラスなどを使用することがあります。
ただAndroidには

  • 実際にアプリを起動する、Instrumentation Test
  • アプリを起動せず実行する、Local Test

の二種類があり、フォルダも分かれています。

そのせいで便利クラスを共有できず全く同じものをそれぞれのフォルダに配置する必要が出てしまいます。

そこでファイルの重複を回避する方法を解説します。

参考元は公式が出している、android/architecture-samplesレポジトリのこちらのPRです

ステップ

  1. Android moduleでrootにmodule作成
  2. gradleの設定
  3. 共有ファイルを追加

実演

Android moduleでrootにmodule作成

タイトルの通りでProjectモードを選択し、プロジェクトのルートからAndroid moduleを作成してください。
名前は適当にshared-testにしています。

img.png

gradleの設定

まずはいらないものを消して、共有ファイルに必要な依存を追加すればOKです、例えばこんな感じになります

plugins {
    alias(libs.plugins.android.library)
    alias(libs.plugins.jetbrains.kotlin.android)
}

android {
    namespace = "com.pank.androidlifecycle.shared.test"
    compileSdk = 34

    defaultConfig {
        minSdk = 26
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

dependencies {

    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.appcompat)
    implementation(libs.material)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
}

新しく作成したモジュールなんですが、Android studioが自動で、settings.gradle.ktsに依存として追加してくれるのでそこはそのままで大丈夫です。
settings.gradle.kts

...
include(":shared-test")

最後にshared-testをlocal, instrumentation用の依存に追加してあげます

build.gradle.kts(:app)

...
dependencies{
    ...
    testImplementation(project(":shared-test"))
    androidTestImplementation(project(":shared-test"))
    ...
}

共有ファイルを追加

あとは共有ファイルをモジュール入れるだけでOKです。
例としてSharedFileというクラスを作成し、local、instrumentationの両テストで使えるのを確認しました。

img.png

さいごに

サンプルレポジトリを眺めていていいなと思ったので共有させてもらいました。
また何かあれば共有しようと思います、ではまた!

Discussion