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

通常の Gradle の設定とは少し違っていたため、記録に残します。
動作環境: Android Studio Koala

## 作ったプログラム
以前投稿した記事を執筆時に作成した観光地リストアプリの JSON ファイル情報のローカライズを行いました。

https://youtube.com/shorts/py2b_sezHKQ?feature=share

https://qiita.com/jtakumi/items/daca2ec02cca68f7262d

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()
}

```

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