チェックポイント:テスト実践
ストーリー
「テストの実践はどうだった? ここでチェックだ」
松本先輩がクイズを用意した。
「ユニットテスト、インテグレーションテスト、E2E、 そしてCI統合。全体を通して理解できているか確認しよう」
クイズの説明
Step 4 で学んだテスト実践の知識を確認します。
- 全6問
- 合格ライン: 80%(5問正解)
問題
Q1. Jest/Vitest でオブジェクトの深い比較を行うマッチャーはどれですか?
- A)
toBe() - B)
toEqual() - C)
toMatch() - D)
toContain()
正解: B
toEqual() はオブジェクトや配列の深い等価比較を行います。toBe() は厳密等価(===)で参照の比較を行うため、同じ内容のオブジェクトでも参照が異なれば false になります。toMatch() は正規表現のマッチ、toContain() は配列の要素や文字列の部分一致です。
Q2. ユニットテストでデータベースやAPIなどの外部依存を置き換える手法は何ですか?
- A) スタブ
- B) モック(Mock)
- C) プロキシ
- D) キャッシュ
正解: B
モック(Mock)は外部依存を模倣するオブジェクトで、ユニットテストの独立性を保つために使用します。jest.fn() や jest.mock() でモックを作成し、戻り値を設定したり、呼び出し回数を検証できます。スタブ(A)もテストダブルの一種ですが、Jest/Vitest では一般的にモックと呼ばれます。
Q3. Playwright でE2Eテストの安定性を高めるために避けるべきものはどれですか?
- A)
data-testid属性の使用 - B)
page.waitForTimeout(3000)による固定待機 - C)
expect(locator).toBeVisible()による要素の出現待ち - D) テストごとのデータクリーンアップ
正解: B
page.waitForTimeout() による固定時間の待機はフレーキーテスト(不安定なテスト)の原因です。ネットワーク状況やサーバーの負荷によって必要な待ち時間が変わるため、要素の出現やAPIレスポンスの完了を待つ方が安定します。
Q4. GitHub Actions でテストが通らないとマージできないようにする設定はどれですか?
- A) CODEOWNERS ファイル
- B) ブランチ保護ルール(Branch protection rules)
- C) GitHub Secrets
- D) .github/dependabot.yml
正解: B
ブランチ保護ルール(Branch protection rules)で「Require status checks to pass before merging」を設定すると、指定したCIジョブ(lint、test等)が全て成功しないとマージできなくなります。CODEOWNERSはレビュアー自動アサイン、GitHub Secretsは秘密情報管理、dependabotは依存関係更新です。
</details>Q5. インテグレーションテストでテスト間のデータ独立性を確保する方法として最も適切なものはどれですか?
- A) テストを常に同じ順序で実行する
- B) 全てのテストで同じテストデータを共有する
- C) 各テストの前後でデータのセットアップとクリーンアップを行う
- D) データベースを使わずにメモリ上のデータを使う
正解: C
テスト間のデータ独立性を確保するには、beforeEach でテストデータをセットアップし、afterEach でクリーンアップ(または beforeEach で前回のデータを削除)します。これにより、テストの実行順序に依存せず、各テストが独立して実行できます。
Q6. テスト実行を高速化するために最も効果的な方法はどれですか?
- A) テスト数を減らす
- B) テストのアサーションを減らす
- C) テストの並列実行(シャーディング)
- D) テストの実行頻度を減らす
正解: C
テストの並列実行(シャーディング)は、テストの品質を維持しながら実行時間を短縮する最も効果的な方法です。テスト数やアサーションを減らす(A, B)のは品質低下につながり、実行頻度を減らす(D)のはバグ発見の遅延につながります。
</details>結果
5問以上正解の場合
合格です。Step 5 に進みましょう。
「テストの実践力もしっかり身についているな。 次はSREの世界に入る。品質を『守り続ける』仕組みを学ぼう」
4問以下の場合
もう少し復習しましょう。
| 問題 | 復習セクション |
|---|---|
| Q1 | Step 4-1 ユニットテストの実践 |
| Q2 | Step 4-1 ユニットテストの実践(モック) |
| Q3 | Step 4-3 E2Eテスト(Playwright) |
| Q4 | Step 4-4 テスト自動化とCI統合 |
| Q5 | Step 4-2 インテグレーションテスト |
| Q6 | Step 4-4 テスト自動化とCI統合 |
次のステップへ
Step 5 ではSRE原則を学びます。SLI/SLO、エラーバジェット、トイル削減など、プロダクションの品質を継続的に守る考え方を身につけましょう。
推定読了時間: 30分