Android の JUnit テストで Locale を切り替えて実行する


TL;DR

  • Locale.setDefault(...) する

背景

  • 言語によって挙動が変わる関数の JUnit テストを書きたい
  • 例)人物の表示名を返す関数
    • 日本語の時:姓+名
    • それ以外の時:名+姓
Person.kt
data class Person(val firstName: String, val lastName: String) {
    fun displayName(): String =
            when (Locale.getDefault()) {
                Locale.JAPAN -> "$lastName $firstName"
                else -> "$firstName $lastName"
            }
}

テストコード

PersonTest.kt
class PersonTest {

    private val person = Person(firstName = "Taro", lastName = "Yamada")

    @Test
    fun displayNameTestJp() {
        Locale.setDefault(Locale.JAPAN)
        Assert.assertEquals("Yamada Taro", person.displayName())
    }

    @Test
    fun displayNameTestUs() {
        Locale.setDefault(Locale.US)
        Assert.assertEquals("Taro Yamada", person.displayName())
    }
}

結果