📘
【Android】Local、Instrumentationテスト間でファイル共有したい
概要
Androidでテストコードを書く際にData生成用のFactoryクラスなどを使用することがあります。
ただAndroidには
- 実際にアプリを起動する、Instrumentation Test
- アプリを起動せず実行する、Local Test
の二種類があり、フォルダも分かれています。
そのせいで便利クラスを共有できず全く同じものをそれぞれのフォルダに配置する必要が出てしまいます。
そこでファイルの重複を回避する方法を解説します。
参考元は公式が出している、android/architecture-samplesレポジトリのこちらのPRです。
ステップ
- Android moduleでrootにmodule作成
- gradleの設定
- 共有ファイルを追加
実演
Android moduleでrootにmodule作成
タイトルの通りでProjectモードを選択し、プロジェクトのルートからAndroid moduleを作成してください。
名前は適当にshared-test
にしています。
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の両テストで使えるのを確認しました。
さいごに
サンプルレポジトリを眺めていていいなと思ったので共有させてもらいました。
また何かあれば共有しようと思います、ではまた!
Discussion