カテゴリ: Kotlin 更新日: 2025/12/23

Kotlinの非同期処理(コルーチン)のテスト方法|初心者でもわかるコルーチンテスト入門

Kotlinの非同期処理(コルーチン)のテスト方法
Kotlinの非同期処理(コルーチン)のテスト方法

先生と生徒の会話形式で理解しよう

生徒

「Kotlinのコルーチンって非同期で動くって聞いたんですが、テストってどうするんですか?」

先生

「いい質問ですね。非同期処理はテストが難しそうに感じるかもしれませんが、実はちゃんとした仕組みを使えば簡単にテストできますよ。」

生徒

「えっ?どういう仕組みなんですか?」

先生

「KotlinにはrunTestというテスト専用の関数があって、コルーチンのテストがしやすくなっているんです。さっそく基本の書き方から見ていきましょう!」

1. コルーチンとは?Kotlinの非同期処理の基本

1. コルーチンとは?Kotlinの非同期処理の基本
1. コルーチンとは?Kotlinの非同期処理の基本

まず、非同期処理(ひどうきしょり)というのは、処理を待たずに次の作業を進める仕組みのことです。Kotlinでは、これを実現するためにコルーチン(coroutine)という機能があります。

たとえば、ネットからデータを取ってくるときに、結果を待っている間に別の処理を並行して動かすことができます。

2. 非同期処理をテストするには?

2. 非同期処理をテストするには?
2. 非同期処理をテストするには?

通常のテストはすぐに結果が出る処理を対象にしていますが、コルーチンを使った関数は時間がかかることがあり、テストには特別な工夫が必要です。

そこで活躍するのが、kotlinx-coroutines-testというライブラリです。このライブラリを使うと、非同期の処理も同期的(順番通り)にテストできます。

3. Gradleの依存関係を追加しよう

3. Gradleの依存関係を追加しよう
3. Gradleの依存関係を追加しよう

まずは、テスト用のライブラリを使えるように、build.gradle.ktsに以下のコードを追加します。


dependencies {
    testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3")
    testImplementation("org.junit.jupiter:junit-jupiter:5.9.3")
}

4. runTestを使った基本的な書き方

4. runTestを使った基本的な書き方
4. runTestを使った基本的な書き方

テスト関数の中でrunTestという関数を使うことで、コルーチンを簡単にテストすることができます。

例として、一定時間後に「完了」と表示するような関数をテストしてみましょう。


import kotlinx.coroutines.delay
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
import kotlin.test.assertEquals

suspend fun fetchData(): String {
    delay(1000)
    return "完了"
}

class CoroutineTest {

    @Test
    fun `非同期関数が正しく結果を返す`() = runTest {
        val result = fetchData()
        assertEquals("完了", result)
    }
}

delayは1秒待つ関数ですが、runTestを使うことで実際には待たずにすぐテストできます。

5. 実行結果の例

5. 実行結果の例
5. 実行結果の例

上記のテストを実行すると、次のように「完了」という結果が正しく返っているかをチェックできます。


CoroutineTest > 非同期関数が正しく結果を返す() PASSED

6. テストの中で複数のコルーチンを使うには?

6. テストの中で複数のコルーチンを使うには?
6. テストの中で複数のコルーチンを使うには?

コルーチンの中でさらに別のコルーチンを呼び出すこともあります。そのような場合でも、runTestの中にまとめて書くことができます。


suspend fun loadUserData(): String {
    delay(500)
    return "ユーザーA"
}

@Test
fun `複数の非同期処理をまとめてテスト`() = runTest {
    val name = loadUserData()
    assertEquals("ユーザーA", name)
}

7. テストで使える仮想時間とは?

7. テストで使える仮想時間とは?
7. テストで使える仮想時間とは?

非同期処理の中には「○秒後に何かする」というようなタイミングが重要な処理もあります。

そんなときは、仮想時間(テスト用の時計)を使って、時間を進めるテストもできます。

たとえば次のように書くと、実際には時間を待たずに、時間経過をシミュレートできます。


import kotlinx.coroutines.test.advanceTimeBy

@Test
fun `仮想時間を使ってdelayの動作を確認`() = runTest {
    var result = "未実行"
    launch {
        delay(1000)
        result = "完了"
    }

    assertEquals("未実行", result)

    advanceTimeBy(1000)

    assertEquals("完了", result)
}

advanceTimeByを使うことで、仮想的に時間を進めてコルーチンの処理を確認できます。

8. Kotlin初心者でも安心のテスト構文

8. Kotlin初心者でも安心のテスト構文
8. Kotlin初心者でも安心のテスト構文

コルーチンは一見むずかしそうに感じるかもしれませんが、runTestadvanceTimeByを使えば、Kotlin初心者でも扱いやすくなります。

非同期処理のテストは、プログラムが正しく動作するかを確認するうえでとても大切です。実際の時間を使わずにテストできるので、効率よく安全なアプリを作ることができます。

今回紹介した基本的なやり方を使えば、複雑な非同期処理のテストも怖くありません。

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のオブジェクト指向の特徴を完全ガイド!初心者でも理解できる他言語との違い
New2
Go言語
Go言語の条件分岐の見やすい書き方を徹底解説!初心者でもわかるif文の使い方
New3
Kotlin
Kotlinのクラス設計に役立つベストプラクティスまとめ|初心者でもわかるクラス設計の考え方
New4
Kotlin
Kotlinでアーキテクチャ設計の基本!MVC・MVP・MVVMの違いを解説
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Kotlin
Kotlinのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.6
Java&Spring記事人気No6
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.7
Java&Spring記事人気No7
Go言語
Go言語のWebアプリにおけるセキュリティベストプラクティス集
No.8
Java&Spring記事人気No8
Swift
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎