テストの重要性
ソフトウェア開発において、バグを未然に防ぎ、コードの品質を維持するために テスト(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. モックを活用する
MockK
やMockito
を使って外部依存を減らす
3. CI/CDに組み込む
- GitHub Actions や GitLab CI/CD で自動テスト実行
gradle test
をCI/CDパイプラインに組み込む
4. テストカバレッジを向上させる
jacoco
などを利用してカバレッジ測定
まとめ
本記事では、Kotlinを使った Unitテスト と UIテスト の基本を解説しました。
- JUnitとMockKを使ってUnitテストを実施
- EspressoでUIの動作を自動化
- ベストプラクティスを適用し、CI/CDと連携することで品質向上
テストを適切に行うことで、Androidアプリの品質を向上させることができます。ぜひ、実際のプロジェクトに取り入れてみてください!