☕ Espressoとは?
Espresso(エスプレッソ) は、Google が提供する Android の UI テストフレームワーク です。
Java の単体テスト(JUnit)では画面の操作はできませんが、Espresso を使えば実際のユーザー操作を自動化してテストできます。
たとえば…
- ボタンを押す
 - テキストを入力する
 - 別の画面に遷移する
 - 表示されているテキストを確認する
 
といった処理を 自動で実行して検証できます。
🔍 なぜ必要なのか?
画面をタップして確認する手動テストは…
- 時間がかかる
 - ミスが起きやすい
 - リファクタで壊れても気づけない
 
という課題があります。
Espresso による UI テストを使えば、アプリの画面遷移や表示状態をコードで保証できるため、信頼性の高い開発が可能になります。
⚙ セットアップ
build.gradle に以下を追加します:
android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}
dependencies {
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
}UIテスト用のコードは src/androidTest/java/ に書きます(test/ ではなく)。
👀 基本構文
Espresso は以下のような構文で操作します:
onView(withId(R.id.button))
    .perform(click());
onView(withId(R.id.textView))
    .check(matches(withText("Hello")));読みやすいように整理すると:
| 処理 | メソッド例 | 説明 | 
|---|---|---|
| UI要素の取得 | onView(withId(...)) | ボタン、テキストなどの要素を指定 | 
| 操作 | .perform(...) | クリック、入力などの操作 | 
| 検証 | .check(...) | 表示内容や状態を確認 | 
🧪 サンプル:ボタンを押してテキストが変わる
テスト対象のActivityのコード
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.button);
        TextView txt = findViewById(R.id.textView);
        btn.setOnClickListener(v -> txt.setText("Hello Espresso!"));
    }
}Espressoテストコード
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
    @Rule
    public ActivityScenarioRule<MainActivity> rule =
        new ActivityScenarioRule<>(MainActivity.class);
    @Test
    public void testButtonClick_changesTextView() {
        // ボタンをクリック
        onView(withId(R.id.button)).perform(click());
        // テキストが変更されたかを確認
        onView(withId(R.id.textView))
            .check(matches(withText("Hello Espresso!")));
    }
}💡 よく使う操作例
| 操作 | コード例 | 
|---|---|
| ボタンを押す | perform(click()) | 
| テキスト入力 | perform(typeText("Hello")) | 
| ソフトキーボードを閉じる | perform(closeSoftKeyboard()) | 
| 表示されていることを確認 | check(matches(isDisplayed())) | 
⚠ Javaエンジニア向けの注意点
- JUnitとは別のランナー(InstrumentationRunner)で動きます。
- UI を実際に操作するため、エミュレータや実機が必要です。
 
 - Android Studio の 
androidTestタブから実行します。 - テストは Activity 起動後に実行されるため、UIの準備が整うまで待機処理が自動で入るのが Espresso の強み(Wait不要)。
 
✅ まとめ
| 項目 | 内容 | 
|---|---|
| 対象 | 画面操作、UI表示確認など | 
| ツール | Espresso(Google製) | 
| 記述場所 | src/androidTest/java/ | 
| 実行方法 | Android Studio or CLI からエミュレータ/実機で実行 | 
| 特徴 | 実ユーザー操作に近いテストができる。UIの状態に賢く同期してくれる。 | 
💬 補足
- 画面遷移のテスト(Intentの発行確認)には 
Intentsライブラリも使えます。 - MVVM構成では ViewModel をユニットテストし、UIレイヤーだけ Espresso でテストする分担が理想です。
 
