Kotlinの非同期処理(コルーチン)のテスト方法|初心者でもわかるコルーチンテスト入門
生徒
「Kotlinのコルーチンって非同期で動くって聞いたんですが、テストってどうするんですか?」
先生
「いい質問ですね。非同期処理はテストが難しそうに感じるかもしれませんが、実はちゃんとした仕組みを使えば簡単にテストできますよ。」
生徒
「えっ?どういう仕組みなんですか?」
先生
「KotlinにはrunTestというテスト専用の関数があって、コルーチンのテストがしやすくなっているんです。さっそく基本の書き方から見ていきましょう!」
1. コルーチンとは?Kotlinの非同期処理の基本
まず、非同期処理(ひどうきしょり)というのは、処理を待たずに次の作業を進める仕組みのことです。Kotlinでは、これを実現するためにコルーチン(coroutine)という機能があります。
たとえば、ネットからデータを取ってくるときに、結果を待っている間に別の処理を並行して動かすことができます。
2. 非同期処理をテストするには?
通常のテストはすぐに結果が出る処理を対象にしていますが、コルーチンを使った関数は時間がかかることがあり、テストには特別な工夫が必要です。
そこで活躍するのが、kotlinx-coroutines-testというライブラリです。このライブラリを使うと、非同期の処理も同期的(順番通り)にテストできます。
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を使った基本的な書き方
テスト関数の中で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. 実行結果の例
上記のテストを実行すると、次のように「完了」という結果が正しく返っているかをチェックできます。
CoroutineTest > 非同期関数が正しく結果を返す() PASSED
6. テストの中で複数のコルーチンを使うには?
コルーチンの中でさらに別のコルーチンを呼び出すこともあります。そのような場合でも、runTestの中にまとめて書くことができます。
suspend fun loadUserData(): String {
delay(500)
return "ユーザーA"
}
@Test
fun `複数の非同期処理をまとめてテスト`() = runTest {
val name = loadUserData()
assertEquals("ユーザーA", name)
}
7. テストで使える仮想時間とは?
非同期処理の中には「○秒後に何かする」というようなタイミングが重要な処理もあります。
そんなときは、仮想時間(テスト用の時計)を使って、時間を進めるテストもできます。
たとえば次のように書くと、実際には時間を待たずに、時間経過をシミュレートできます。
import kotlinx.coroutines.test.advanceTimeBy
@Test
fun `仮想時間を使ってdelayの動作を確認`() = runTest {
var result = "未実行"
launch {
delay(1000)
result = "完了"
}
assertEquals("未実行", result)
advanceTimeBy(1000)
assertEquals("完了", result)
}
advanceTimeByを使うことで、仮想的に時間を進めてコルーチンの処理を確認できます。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
8. Kotlin初心者でも安心のテスト構文
コルーチンは一見むずかしそうに感じるかもしれませんが、runTestやadvanceTimeByを使えば、Kotlin初心者でも扱いやすくなります。
非同期処理のテストは、プログラムが正しく動作するかを確認するうえでとても大切です。実際の時間を使わずにテストできるので、効率よく安全なアプリを作ることができます。
今回紹介した基本的なやり方を使えば、複雑な非同期処理のテストも怖くありません。
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験