Android application development 第25章:Androidアプリ開発における単体テスト(JUnit)

🔍 単体テスト(JUnit)とは?

単体テストとは、「クラスやメソッド単位での正しさを検証するテスト」のことです。
Android アプリ開発でも、サーバーサイド Java と同様に JUnit を用いたテストが可能です。

「ボタンが押されたときにロジックが正しく動くか?」など、UI以外の部分(ロジック層)をテストするのが主な目的です。


🧪 Android開発におけるJUnitの使いどころ

✅ テスト対象になりやすいもの

  • ビジネスロジック(計算、バリデーションなど)
  • Repositoryクラス
  • ViewModelの振る舞い
  • ユーティリティクラス など

❌ テストが難しい(=別アプローチが必要)

  • UIの挙動(ボタン押下、画面遷移)→ Espresso などの UIテストが適切
  • Context など Android に強く依存した処理 → Instrumentation テストで対応

🛠 環境構築

build.gradle (app) に以下が含まれていることを確認:

dependencies {
    testImplementation 'junit:junit:4.13.2'
}

これで、通常の Java プロジェクトと同じように JUnit が使えるようになります。


📦 テスト用ディレクトリ構成

app/
 └── src/
      ├── main/       ← 通常のアプリコード
      └── test/       ← JUnit用のユニットテスト(Javaベース)

テスト対象と同じパッケージ構成にして、クラス名の末尾に Test を付けるのが一般的です。

例:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

に対して、以下のようにテストします。

public class CalculatorTest {

    @Test
    public void add_shouldReturnCorrectSum() {
        Calculator calculator = new Calculator();
        assertEquals(5, calculator.add(2, 3));
    }
}

📘 基本的なJUnitアノテーション

アノテーション説明
@Testテストメソッドに付ける。
@Before各テスト前に実行される処理(初期化など)
@After各テスト後に実行される処理(後片付け)
@BeforeClassテストクラスの最初に1回だけ実行される
@AfterClassテストクラスの最後に1回だけ実行される

🧠 注意点(Javaエンジニア視点)

  • Android の一部のクラス(ContextSharedPreferences など)は、通常の JUnit テストでは直接使えません
    • その場合は Mockito でモックする、または Instrumented Test を使う必要があります。
  • Android Studio の Run から簡単にテスト実行できますが、テストの種類(local/unit vs. instrumentation) を意識することが大切です。

🧪 Mockitoとの併用(簡単な例)

public class TaskRepository {
    private final RemoteDataSource remote;

    public TaskRepository(RemoteDataSource remote) {
        this.remote = remote;
    }

    public String fetch() {
        return remote.getData();
    }
}
@RunWith(MockitoJUnitRunner.class)
public class TaskRepositoryTest {

    @Mock
    RemoteDataSource remote;

    @Test
    public void fetch_shouldReturnDataFromRemote() {
        when(remote.getData()).thenReturn("Hello");

        TaskRepository repo = new TaskRepository(remote);
        assertEquals("Hello", repo.fetch());
    }
}

✅ まとめ

項目説明
テスト対象ビジネスロジックやViewModelなどAndroid非依存の部分
使用ツールJUnit4(または5)、Mockito
配置場所src/test/java/ 以下
実行方法Android Studioのテスト機能で可能

mh

Related Posts

Android application development 第24章:HiltによるDI導入とその注意点

🔰 Hiltとは? **Hilt(ヒルト)**は、Googl…

Android application development 第23章:Javaエンジニアに向けたDIの復習

🔧 そもそもDI(依存性注入)とは? DI(Dependen…

You Missed

Kubernetes Learning 第21章:Secretの暗号化とマウント方法 〜機密情報を安全に扱うKubernetesの基本〜

  • 投稿者 mh
  • 5月 25, 2025
  • 6 views

Android application development 第25章:Androidアプリ開発における単体テスト(JUnit)

  • 投稿者 mh
  • 5月 25, 2025
  • 6 views

Kubernetes Learning 第20章:ConfigMapの詳細 〜アプリケーション設定をKubernetesで管理する〜

  • 投稿者 mh
  • 5月 24, 2025
  • 19 views

Android application development 第24章:HiltによるDI導入とその注意点

  • 投稿者 mh
  • 5月 24, 2025
  • 20 views

Kubernetes Learning 第19章:ローカルストレージとクラウドストレージ(EBS, NFSなど)

  • 投稿者 mh
  • 5月 23, 2025
  • 35 views

Android application development 第23章:Javaエンジニアに向けたDIの復習

  • 投稿者 mh
  • 5月 23, 2025
  • 30 views