JUnit4
https://github.com/googlesamples/android-testing/tree/master/runner/AndroidJunitRunnerSampleにサンプルがあります。
具体的には CalculatorAddParameterizedTest.java がテストクラスで、
テスト対象のクラスは Calculator.java です。
上記のサンプルを見ればだいたいわかるのですが、Kotlinで書いた以下のFizzBazzをテストしてみたいと思います。
- class FizzBazz {
- fun fizzbazz(value: Int): String {
- return when {
- value % 15 == 0 -> "fizzbazz"
- value % 3 == 0 -> "fizz"
- value % 5 == 0 -> "bazz"
- else -> value.toString()
- }
- }
- }
- 1. テストクラスに @RunWith アノテーションで Parameterized を指定する。
- 2. Parameterized テストで使う値をコンストラクタの引数として受け取り保持する。
- 3. @Parameters アノテーションをつけた static メソッドを用意する(つまり @JvmStatic が必要)。このメソッドではコンストラクタ引数に対応した値の配列のIterableを返す。
- 4. 保持した値を使ってテストする。
- /**
- * @RunWith で Parameterized を指定する
- *
- * Parameterized テストで使う値をコンストラクタの引数として受け取る
- * ここでは fizzbazz() に渡す値と、fizzbazz()の戻り値の期待値の2つを引数として受け取る
- */
- @RunWith(Parameterized::class)
- class FizzBazzParameterizedTest(
- private val value: Int,
- private val expected: String
- ) {
- private lateinit var fizzBazz: FizzBazz
- @Before
- fun setUp() {
- fizzBazz = FizzBazz()
- }
- @Test
- fun testFizzBazz() {
- assertThat(fizzBazz.fizzbazz(value)).isEqualTo(expected)
- }
- companion object {
- /**
- * @Parameters と @JvmStatic をつける
- * @return [Iterable] コンストラクタに渡す値のIterableを返す
- */
- @Parameters
- @JvmStatic
- fun data(): Iterable<Array<Any>> {
- return listOf(
- arrayOf(1, "1"),
- arrayOf(2, "2"),
- arrayOf(3, "fizz"),
- arrayOf(4, "4"),
- arrayOf(5, "bazz"),
- arrayOf(15, "fizzbazz")
- )
- }
- }
- }
テスト結果

Robolectric
BlockJUnit4ClassRunnerWithParameters を継承した Runner であれば、@Parameterized.UseParametersRunnerFactory でその Runner を返す ParametersRunnerFactory を指定することで、その Runner で Parameterized テストを実行することができます。RobolectricTestRunner は SandboxTestRunner を継承しているためこの方法は使えません。 代わりに Robolectric には ParameterizedRobolectricTestRunner が用意されています。
TextUtils を使った次の EmptyChecker をテストしてみます。
- class EmptyChecker {
- fun isEmpty(value: String?): Boolean {
- return TextUtils.isEmpty(value)
- }
- }
違いは @RunWith に ParameterizedRobolectricTestRunner を指定することと、@ParameterizedRobolectricTestRunner.Parameters を使うことです。
- /**
- * @RunWith で ParameterizedRobolectricTestRunner を指定する
- *
- * Parameterized テストで使う値をコンストラクタの引数として受け取る
- * ここでは isEmpty() に渡す値と、isEmpty()の戻り値の期待値の2つを引数として受け取る
- */
- @RunWith(ParameterizedRobolectricTestRunner::class)
- class EmptyCheckerParameterizedTest(
- private val value: String?,
- private val expected: Boolean
- ) {
- private lateinit var emptyChecker: EmptyChecker
- @Before
- fun setUp() {
- emptyChecker = EmptyChecker()
- }
- @Test
- fun testFizzBazz() {
- assertThat(emptyChecker.isEmpty(value)).isEqualTo(expected)
- }
- companion object {
- /**
- * @ParameterizedRobolectricTestRunner.Parameters と @JvmStatic をつける
- * @return [Iterable] コンストラクタに渡す値のIterableを返す
- */
- @ParameterizedRobolectricTestRunner.Parameters
- @JvmStatic
- fun data(): Iterable<Array<Any?>> {
- return listOf(
- arrayOf<Any?>(null, true),
- arrayOf<Any?>("", true),
- arrayOf<Any?>("a", false)
- )
- }
- }
- }
テスト結果

0 件のコメント:
コメントを投稿