【正社員】還元率83%【フリーランス】マージン一律5万円で案件をご紹介させていただきます。 詳細はこちら

【Android】<Kotlin>JUnit5でよく使われるアノテーションまとめ

【Android】<Kotlin>JUnit5でよく使われるアノテーションまとめ
すだ

みなさまこんにちは〜!
メモリアインクのすだです。

今回は、Androidアプリ開発におけるJUnit5を使ったテストにおいて
頻繁に使用されるアノテーションをご紹介します。

この記事を読んでわかること…
・JUnit5でのテストにおける様々なアノテーション

JUnit5を使用した基本的なテストの方法に関しては、以下の記事で詳しくご紹介しています。
ぜひ併せてご覧ください。

目次

環境

  • Kotlin (ver 1.9.0)
  • Android Studio (Giraffe | 2022.3.1 Patch 3)

@BeforeEach、@AfterEach:テストの前後に行う処理

テストコード例▼

@BeforeEach
fun setup() {
    // 毎回のテスト前に実行
}

@AfterEach
fun tearDown() {
    // 毎回のテスト後に実行
}

@BeforeEach … 各テスト前に初期化を行う
@AfterEach … 各テスト後の後始末処理を行う

データを每回初期化したり、リソースを解放したりするときに便利です。

@BeforeAll、@AfterAll:全テスト前後の処理

テストコード例▼

companion object {
    @BeforeAll
    @JvmStatic
    fun setupAll() {
        // テスト全体前に一度だけ実行
    }

    @AfterAll
    @JvmStatic
    fun tearDownAll() {
        // テスト全体後に一度実行
    }
}

@BeforeAll … 全テスト前に一度だけ実行
@AfterAll … 全テスト後に一度だけ実行

例えば、データベースを初期化したり、ネットワークモックサーバーを起動/停止したりなどのシーンで使用されます。

@JvmStaticは、「KotlinのメソッドをJavaスタイル(staticメソッド)として使えるようにする」ためのアノテーションです。
Kotlinでは本来、クラス内の関数はインスタンス(オブジェクト)を作らないと呼べないですが
JUnit5の @BeforeAll@AfterAll のように、
「クラス全体に対して一回だけ実行したい」関数には、static(静的)な関数が必要です。

Kotlinには元々 static というキーワードはないので、代わりに
@JvmStaticを付けることで、static扱いにする
という仕組みになっています。

@DisplayName:わかりやすいテスト表示

テストコード例▼

@DisplayName("ユーザー登録の成功テスト")
@Test
fun registerUserSuccess() {
    // テスト内容
}

@DisplayName … テストクラスやテストメソッドに「人間が読んで分かりやすい名前」を付ける

テストのメソッドを自然言語で説明しておきたい場合などに役立ちます。

@Nested:テストをグループ化

テストコード例▼

@DisplayName("ログイン機能のテスト")
class LoginTests {

    @Nested
    @DisplayName("正常系")
    inner class SuccessCases {

        @Test
        fun `IDとパスワードが正しければログイン成功`() {
            // テスト内容
        }
    }

    @Nested
    @DisplayName("異常系")
    inner class ErrorCases {

        @Test
        fun `IDが間違っている場合はログイン失敗`() {
            // テスト内容
        }

        @Test
        fun `パスワードが空の場合はログイン失敗`() {
            // テスト内容
        }
    }
}

@Nested … テストクラスの中に、さらに「小さなテストグループ」を作る

テストケースを「意味のあるまとまり」で整理したいときに便利です。
クラスの中にさらにクラスを定義するので、inner class で定義する必要があります。

@Disabled:テストを一時無効化

テストコード例▼

@Disabled("今は必要ないので")
@Test
fun oldTest() {}

@Disabled … テストを一時無効化する

実装中のものや、今はテストしなくてよいものを一時停止するときに使います。

@ParameterizedTest:複数パターンを一括テスト

テストコード例▼

@ParameterizedTest
@CsvSource(
    "1,2,3",
    "4,5,9",
    "0,0,0"
)
fun `足し算が正しい`(a: Int, b: Int, expected: Int) {
    assertEquals(expected, a + b)
}

@ParameterizedTest … 複数の入力パターンを自動的にテストする
@CsvSource … テストパターンをカンマ区切り(CSV形式)で列挙する

a=1, b=2 → expected=3
a=4, b=5 → expected=9
a=0, b=0 → expected=0
このようにパターンをすべて自動で回してくれます。

ちなみに int配列だけであれば@ValueSourceというのも使えます。

まとめ

おつかれさまでした。いかがでしたでしょうか!

JUnit5は、最初はアノテーションが多くて迷いますが、少しずつ使いながら覚えていけばOKです。
アノテーションを駆使して、正確で細かいテストが書けるよう実践してみてください!

すだ

技術者としてのキャリアパスを次のレベルへと進めたい皆様、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
を通じて、
自分の市場価値をさらに向上させてみませんか?

それではまた次の記事でお会いしましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

弊社テックブログをご愛読いただきありがとうございます。
当テックブログを運用している株式会社メモリアインクは、
【正社員】還元率83%
【フリーランス】マージン一律5万円で案件のご紹介
と、エンジニアの皆様に分かりやすい形で稼げる仕組みを構築し提供させていただいております。

コメント

コメントする

目次