Kotlinで学ぶUnitテストとUIテスト:Androidアプリの品質向上【Kotlin入門⑲】

テストの重要性

ソフトウェア開発において、バグを未然に防ぎ、コードの品質を維持するために テスト(Testing) は欠かせません。Androidアプリ開発では、主に Unitテスト(単体テスト)UIテスト(インターフェーステスト) の2種類のテストが重要です。

UnitテストとUIテストの違い

テストの種類目的実施レイヤー代表的なツール
Unitテストビジネスロジックの検証クラス・メソッド単位JUnit, MockK
UIテストユーザー操作の検証UIコンポーネント・画面単位Espresso, UI Automator

Unitテストの基本

Unitテストとは?

Unitテスト(単体テスト)は、アプリの各コンポーネント(関数・クラス)の動作が正しいかを確認するテストです。

メリット:

  • コードの品質向上
  • バグの早期発見
  • 保守性の向上

JUnitを使ったUnitテスト

JUnit は、Java/Kotlinの標準的なテストフレームワークで、シンプルにUnitテストを実装できます。

JUnitの基本構文

import org.junit.Assert.assertEquals
import org.junit.Test

class MathUtilsTest {
    @Test
    fun addition_isCorrect() {
        val result = 2 + 3
        assertEquals(5, result)
    }
}

例外処理のテスト

import org.junit.Assert.assertThrows
import org.junit.Test

class ExceptionTest {
    @Test
    fun testException() {
        assertThrows(IllegalArgumentException::class.java) {
            throw IllegalArgumentException("Invalid input")
        }
    }
}

UIテストの基本

UIテストとは?

UIテストは、アプリの画面(ボタンやテキストの表示など)が正しく動作しているかを検証するテストです。

メリット:

  • UIの動作確認を自動化
  • ユーザー体験の向上

Espressoを使ったUIテスト

ボタンのクリックをテスト

import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.rules.ActivityScenarioRule
import org.junit.Rule
import org.junit.Test

class MainActivityTest {
    @get:Rule
    val activityRule = ActivityScenarioRule(MainActivity::class.java)

    @Test
    fun buttonClick_changesText() {
        onView(withId(R.id.button)).perform(click())
        onView(withId(R.id.textView)).check(matches(withText("Button Clicked!")))
    }
}

ベストプラクティス

1. テストコードの分離

  • ビジネスロジックは Unitテスト
  • UI操作は UIテスト

2. モックを活用する

  • MockKMockito を使って外部依存を減らす

3. CI/CDに組み込む

  • GitHub ActionsGitLab CI/CD で自動テスト実行
  • gradle test をCI/CDパイプラインに組み込む

4. テストカバレッジを向上させる

  • jacoco などを利用してカバレッジ測定

まとめ

本記事では、Kotlinを使った UnitテストUIテスト の基本を解説しました。

  • JUnitとMockKを使ってUnitテストを実施
  • EspressoでUIの動作を自動化
  • ベストプラクティスを適用し、CI/CDと連携することで品質向上

テストを適切に行うことで、Androidアプリの品質を向上させることができます。ぜひ、実際のプロジェクトに取り入れてみてください!