0
1

Android Gradle Pulugin で Junit5 を使う言語切り替えテストのための設定 ( Gradle Kotlin DSL )

Posted at

通常の 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()
}

忘れがちだけれど

ユニットテストを書いてより安全で確実なプログラムを目指していきましょう!! 👩‍💻

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1