Instruction file imported from ttttat/hotel-search-api (
.github/instructions/testing.instructions.md). Copyright stays with the author.
テストコード開発指示 (tests/)
このルールは tests/ 配下に配置する単体テストおよび結合テストの実装・修正時に適用されます。
1. テストフレームワーク & 構成
- テストフレームワークには pytest を使用してください。
- テストファイル名は
test_<対象モジュール>.py、テスト関数名はtest_<検証内容>()としてください。 - 各モジュールごとにテストクラスまたは関数をグループ化してください。
2. APIモック化の徹底
- 外部API(楽天トラベルAPI)に対する実際のHTTPリクエストは絶対に送信しないでください。
unittest.mock(patch/MagicMock)またはresponses/requests-mockを利用してrequests.getやRakutenTravelAPI._requestをモック化してください。- テスト用のフィクスチャ(fixture)として、楽天APIの正常なJSONレスポンス例およびエラーレスポンス例を用意してください。
3. テストカバレッジの要件
以下のケースを網羅するテストを作成してください:
- 正常系:
- APIからの正常応答時のパース結果
- CSVファイルへの正常出力とフォーマット検証
- 設定値(
Config)の正しい読み込み
- 異常系・エッジケース:
- APIキー未設定時の
ConfigurationError送出 - 429 レートリミット発生時のリトライ挙動およびリトライ上限超過時の
RakutenAPIRateLimitError送出 - タイムアウト・ネットワーク障害時の
RakutenAPIRequestError送出 - 不正なJSONレスポンス時の
RakutenAPIResponseError送出 - 検索結果0件時の適切な空リスト/None返却
- APIキー未設定時の
4. クリーンアップ
- テスト中に一時ファイル(CSVやログなど)を生成する場合は、pytestの
tmp_pathフィクスチャを使用するか、テスト終了後に確実に削除してください。