通常の Gradle の設定とは少し違っていたため、記録に残します。
動作環境: Android Studio Koala
作ったプログラム
以前投稿した記事を執筆時に作成した観光地リストアプリの JSON ファイル情報のローカライズを行いました。
Android のシステム言語を変えて、アプリを再起動すると読み込む JSON ファイルを切り替えてそれぞれの言語で表示する仕組みです。
使用しているプログラムを簡単に書くと以下のようなものです。
getDefaultLanguage.kt
fun getLocalizeJSONFileName():String {
// ここで今デフォルトにしている言語を読み出します。
val locale = Locale.getDefault()
val language = locale.language
Log.d("tag",language)
return getDefaultLanguage(language)
}
fun getDefaultLanguage(language:String): String {
// 取得した言語コードをもとに判定を行います。
return when (language) {
"ja" -> "Landmarks_ja.json"
"ko" -> "Landmarks_ko.json"
"zh" -> "Landmarks_zh_rCN.json"
"es" -> "Landmarks_es_rES.json"
else -> "Landmarks.json"
}
}
ユニットテスト
この判定プログラムをするためのユニットテストを作成しました。JUnit4 とは少しだけ書き方が違います。
getDefaultLanguageTest.kt
class getDefaultLanguageTest {
// JUnit 4 では Before
@BeforeEach
fun setUp() {
System.setProperty("java.util.logging.config.file", "logging.properties")
}
// JUnit 4 では After
@AfterEach
fun tearDown() {
System.clearProperty("java.util.logging.config.file")
}
@Test
fun `getDefaultLanguage returns japanese file name`() {
val language = "ja"
val expected = "Landmarks_ja.json"
val actual = getDefaultLanguage(language)
assertEquals(expected, actual)
}
@Test
fun `getDefaultLanguage returns korean file name`() {
val language = "ko"
val expected = "Landmarks_ko.json"
val actual = getDefaultLanguage(language)
assertEquals(expected, actual)
}
@Test
fun `getDefaultLanguage returns chinese file name`() {
val language = "zh"
val expected = "Landmarks_zh_rCN.json"
val actual = getDefaultLanguage(language)
assertEquals(expected, actual)
}
@Test
fun `getDefaultLanguage returns spanish file name`() {
val language = "es"
val expected = "Landmarks_es_rES.json"
val actual = getDefaultLanguage(language)
assertEquals(expected, actual)
}
@Test
fun `getDefaultLanguage returns default file name`() {
val language = "aaaa"
val expected = "Landmarks.json"
val actual = getDefaultLanguage(language)
assertEquals(expected, actual)
}
}
Gradle での設定
インターネットで調べてみると JUnit を使うために示されているのが、test{useJUnitPlatform()}
を Gradle の中に記述する方法です。
ですが、 Android Studio 上で開いている Gradle Plugin には追加できません。
その代わりにtasks.withType<Test> { useJUnitPlatform()}
を使用すると Sync できるようになります。
build.gradle.kts
// app Level
dependencies {
// junit 関係のライブラリです。
testImplementation(libs.junit)
testImplementation(libs.junit.jupiter)
testImplementation(libs.junit.jupiter)
testImplementation(libs.junit.jupiter.api)
testImplementation(libs.junit.jupiter)
testRuntimeOnly(libs.junit.jupiter.engine)
}
// dependencies や android の外側に記述します。
tasks.withType<Test> {
useJUnitPlatform()
}
忘れがちだけれど
ユニットテストを書いてより安全で確実なプログラムを目指していきましょう!! 👩💻