0Pricing
Dart Academy · レッスン

非同期コードと Stream のテスト

Future を await し、イベントの順序を検証します

「非同期コードと Stream のテスト」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。

非同期処理には注意が必要

実際のコードの多くはFutureを返します。テストで待つのを忘れると、処理が終わる前に成功してしまうことがあります。⏳

returnするかawaitする

テスト本体がasyncで処理をawaitする場合、またはFutureを直接returnする場合、テストランナーは完了を待ちます。

test('loads user', () async {
  final u = await fetchUser();
  expect(u.name, 'Ada');
});

FutureにはexpectLaterを使う

一致させる値自体がFutureの場合はexpectLaterを使います。たとえば、Futureが指定した結果で完了することを確認できます。

await expectLater(fetchValue(), completion(42));

completion Matcher

completion matcherは、Futureが正常に完了し、その値が内部のmatcherに一致した場合に成功します。

expectLater(load(), completion(isNotEmpty));

非同期エラーを期待する

Futureが失敗することをアサートするには、expectLaterとthrowsAを組み合わせ、正しいエラーがスローされることをテストで確認します。

await expectLater(
  risky(), throwsA(isA<StateError>()));

Streamは多くの値を発行する

Streamは、時間の経過に伴って一連のイベントを送ります。テストでは、その一連のイベント全体を順番どおりに確認します。

emits Matcher

emitsを使うと、Streamが次に生成する値をアサートできます。期待する順序の列にはemitsInOrderを使います。

await expectLater(
  counter, emitsInOrder([1, 2, 3]));

終了を通知する

emitsDone matcherは、期待した時点でStreamが閉じることを確認します。いつまでも終了しないStreamを見つけるのに役立ちます。

expectLater(ticks, emitsThrough(emitsDone));

Streamのエラーも確認する

matcherを組み合わせ、emitsErrorでStream内のエラーを期待します。失敗がイベントとして届くことを確認できます。

emitsInOrder([1, emitsError(isException)]);

見かけだけの成功に注意する

よくあるバグは、awaitを忘れることです。テストが早く終了し、ひそかに成功してしまいます。非同期処理は必ずawaitするかreturnしてください。

タイムアウトが役に立つ

非同期コードが停止して進まない場合、テストランナーが処理を停止します。時間のかかるテストでは、timeoutを指定して待機時間を調整できます。

test('slow', () async { /* ... */ },
  timeout: Timeout(Duration(seconds: 5)));

クイックチェック

Streamが1、2、3を順番に発行することをどのようにアサートしますか?

まとめ

Futureをawaitし、expectLaterとcompletionおよびthrowsAを使い、emits matcherでStreamを確認しました。非同期処理も自信を持ってテストできます。🌊

よくある質問

「非同期コードと Stream のテスト」レッスンは無料ですか?

はい。「非同期コードと Stream のテスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。

「非同期コードと Stream のテスト」で何を学びますか?

Future を await し、イベントの順序を検証します ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Dart Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「非同期コードと Stream のテスト」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDart Academyレッスンでコードを書いて実行できますか?

はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 最初の test と expect
  2. group、setUp、tearDown
  3. 非同期コードと Stream のテスト
  4. Mock、Fake、カバレッジ
← Dart Academyに戻る