visible true

技術的なメモを書く

Robolectricで複数のLocaleをテストしたい時はEnclosedで頑張るしかないのか

RobolectricでLocaleを指定するには@Config(qualifiers)を使う

テストで特定のLocaleで実行したいときってありますよね。Robolectric*1だと@Config(qualifiers)*2を使うことでテストのLocaleを指定できます。

@RunWith(RobolectricTestRunner::class)
@Config(qualifiers = "zh-rCN")
class HogeTest {

ただこれだとテストケース全体に適用されるので、ある言語の時だけ特殊な表記をするケースなんかを書くのには適しません。

複数のLocaleで回したい場合はEnclosedを使う?

Enclosedを使えば一つのクラスのなかで複数のテストクラスを書けるので、qualifiersを分けてテストを書けます。

@RunWith(Enclosed::class)
class HogeTest {
  @RunWith(RobolectricTestRunner::class)
  @Config(qualifiers = "ja")
  class JaTest {
  }

  @RunWith(RobolectricTestRunner::class)
  @Config(qualifiers = "zh-rCN")
  class CnTest {
  }
}

しかし...

いちいちクラス切るのめんどくさいなぁ

同じテスト内容でロケールだけ変えて結果の違いをテストしたいみたいな場合にもいちいちクラス切って書かないといけないのでめんどくさいな〜ということでどうしたらいいんだろう。なにかいい方法あるかな〜って思った話です。

*1:4.0-beta-1を使ってますがそれ以前でも使えるはずです

*2:locale以外にもいろいろ指定できます http://robolectric.org/using-qualifiers/