Mock、Fake、カバレッジ
ユニットを分離し、テスト範囲を測定します
「Mock、Fake、カバレッジ」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。
ユニットを分離する
ユニットテストでは、1つの部分を分離して確認します。実際のデータベースやネットワークはテストを遅く、不安定にするため、置き換えて使用します。🔌
テストダブル
テストダブルは、実際の依存先の代わりになるものです。よく使う種類には、mock、fake、stubがあります。
Fakeとは
fakeは、動作するものの簡略化された実装です。たとえば、実際のデータベースの代わりにメモリ上のリストを使います。
class FakeRepo implements Repo {
final _items = <Item>[];
}Mockとは
mockは、どのように呼び出されたかを記録するため、最終的な値だけでなく、やり取りも検証できます。
mockitoパッケージ
mockitoパッケージはmockを自動生成します。対象の型にアノテーションを付け、build_runnerを実行して生成します。
@GenerateMocks([Repo])
import 'repo_test.mocks.dart';whenでスタブを設定する
whenを使ってmockの動作を定義します。「このメソッドが呼ばれたら、この値を返す」と指定することで、動作を予測可能にします。
when(repo.find(1))
.thenReturn(Item('a'));呼び出しを検証する
verifyを使うと、メソッドが呼び出されたか、何回呼び出されたかをアサートできます。コードが依存先と正しくやり取りしたことを確認できます。
verify(repo.save(any)).called(1);非同期処理をスタブ化する
Futureを返すメソッドにはthenAnswerを使って動作を定義し、mockから非同期の結果を返せるようにします。
when(api.load())
.thenAnswer((_) async => 'ok');MockとFakeの違い
現実的な動作が必要な場合はfakeを使い、どの呼び出しが行われたかを重視する場合はmockを使います。
Coverageとは
Coverageは、テストが実際に実行した行を測定します。高いカバレッジは十分なテストの手がかりになりますが、正しさを保証するものではありません。
カバレッジを生成する
coverageの収集を有効にしてテストを実行し、そのデータを読み取り可能なレポートやツールにアップロードできる形式に変換します。
dart test --coverage=coverageクイックチェック
呼び出しを記録して検証できるテストダブルはどれですか?
まとめ
fakeとmockでユニットを分離し、whenでスタブを設定し、呼び出しを検証して、カバレッジを測定しました。高速で、焦点が明確で、信頼できるテストです。🎯
よくある質問
「Mock、Fake、カバレッジ」レッスンは無料ですか?
はい。「Mock、Fake、カバレッジ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。
「Mock、Fake、カバレッジ」で何を学びますか?
ユニットを分離し、テスト範囲を測定します ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Dart Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Mock、Fake、カバレッジ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDart Academyレッスンでコードを書いて実行できますか?
はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 最初の test と expect
- group、setUp、tearDown
- 非同期コードと Stream のテスト
- Mock、Fake、カバレッジ