プログラムを実装したあとにテストを作成すると、想定した動作を確認でき、修正による不具合も見つけやすくなります。
GitHub Copilotを使えば、関数の仕様や既存のテスト構成を読み取らせて、単体テストのたたき台を効率よく作成できます。
ただし、生成されたテストが正しいとは限らないため、実行結果とテスト内容を人が確認することが大切です。
GitHub Copilotでテストコードを作成する方法
作成前にプロジェクトのテスト環境を確認する
まず、プロジェクトで使っている言語、テストフレームワーク、テストファイルの配置場所を確認します。
たとえば、JavaScriptやTypeScriptではJestやVitest、Pythonではpytest、C#ではxUnitやNUnitなどがよく使われます。
既存のテストがある場合は、ファイル名や書き方、モックの使い方を確認し、同じ規約に合わせるようCopilotに伝えましょう。
テスト環境がまだ用意されていない場合は、先にプロジェクトへテストフレームワークを導入し、テストを実行できる状態にしておきます。
対象のコードと仕様をCopilotに伝える
テスト対象のファイルを開き、関数の目的や入力、出力、例外条件などが分かる状態でCopilotに依頼します。
対象コードだけで仕様が読み取れない場合は、画面仕様や要件、関連する型定義なども併せて参照させると、意図に沿ったテストになりやすくなります。
依頼には、使うフレームワーク、テストファイルの場所、確認したいケースを具体的に含めます。
この関数の単体テストを作成してください。
既存のテストと同じVitestを使用し、テストは隣接する.test.tsファイルに追加してください。
正常な入力、空の入力、不正な入力、境界値を確認してください。
各テストで何を検証するのか分かる名前を付けてください。
Copilotのチャット機能やエディター内の提案機能など、利用する方法は環境や拡張機能のバージョンによって異なります。
単体テストの作成手順
1. 正常系・異常系・境界値を洗い出す
まず、仕様から「正しい入力で期待どおりの結果になるか」「不正な入力をどう扱うか」「条件の境目で誤りが起きないか」を整理します。
たとえば、年齢を判定する関数なら、通常の年齢だけでなく、判定条件の直前・直後、最小値、最大値、想定外の値も確認対象になります。
単に実装コードの行を通すだけではなく、利用者にとって重要な振る舞いを検証することがポイントです。
2. テストコードを生成して内容を確認する
生成されたテストをそのまま採用せず、テスト対象の仕様と期待値が一致しているかを一つずつ確認します。
とくに、実装と同じ誤った前提をテストにも持ち込んでいないか、テストが実際に結果を検証しているかに注意してください。
たとえば、関数の戻り値を確認せず例外が発生しないことだけを調べるテストでは、期待する機能を十分に保証できない場合があります。
テストの期待値を、実装コードの動作から機械的に決めないでください。仕様や要件を基準に判断する必要があります。
3. テストを実行して失敗の原因を調べる
テストファイルを保存したら、プロジェクトで定められたコマンドやVS Codeのテスト実行機能からテストを実行します。
失敗した場合は、テストの記述ミス、環境設定の不足、実装の不具合を切り分けて確認します。
エラーメッセージをCopilotに提示して修正案を求めることもできますが、変更内容を確認してから再実行しましょう。
テストが成功した場合も、テストケースが重要な条件を網羅しているかを見直すことが大切です。
よりよいテストを作るためのコツ
依頼内容を具体的にする
「テストを書いて」という短い指示よりも、対象の仕様、利用フレームワーク、ファイル配置、確認する条件を明示したほうが、修正の少ない提案を得やすくなります。
テストの名前やモックの方針、非同期処理の扱いなど、プロジェクト固有のルールも必要に応じて伝えてください。
一度に広い範囲を生成させない
複数のファイルや複雑な仕様をまとめて依頼すると、意図しない変更や見落としが増えることがあります。
まずは関数やクラス単位でテストを作り、内容と実行結果を確認してから対象を広げると、安全に進められます。
機密情報を入力しない
コードやプロンプトに認証情報、個人情報、社外秘の仕様を含める場合は、組織の利用ルールとGitHub Copilotの設定を確認してください。
生成コードは必ずレビューし、テストの実行結果を確認してから採用しましょう。
まとめ
GitHub Copilotは、既存のコードやテスト規約を踏まえた単体テストのたたき台を作成し、テスト作業を効率化するのに役立ちます。
対象の仕様と確認条件を具体的に伝え、生成されたテストの期待値や網羅性を人が確認したうえで実行することが重要です。
正常系だけでなく異常系や境界値も検証し、失敗したときは原因を切り分けることで、信頼性の高いテストに仕上げられます。
