🔍 単体テスト(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 の一部のクラス(
Context
、SharedPreferences
など)は、通常の 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のテスト機能で可能 |