目的
テスト名は、テストコードの可読性と理解しやすさを高める重要な要素です。本資料では、適切なテストメソッド名の付け方を解説します。
テスト名の重要性
- テストの意図を明確にする:
- テストが何を検証しているのかを一目で分かるようにします。
- ドキュメントとしての役割:
- コードの仕様や意図を他の開発者が容易に理解できるようにします。
- デバッグの助け:
- テストが失敗した際、問題の範囲をすぐに特定できるようにします。
テスト名の命名ルール
1. 英語で記述する
- コードが英語で書かれている場合、テスト名も英語で統一します。
- 他国の開発者やツールで扱いやすくするためです。
2. テスト名の構造
テスト名には以下の3要素を含めます:
項目 | 説明 | 例 |
---|
動作 (Action) | テストする処理または振る舞いを表す動詞 | SaveAndLoad (保存と読み出し) |
条件 (Condition/Context) | テストの条件や状況を明示 | WithValidData (有効なデータ) |
期待結果 (ExpectedResult) | 動作の期待結果を記述 | ShouldSucceed (成功する) |
テンプレート
[Action]_[Condition/Context]_[ExpectedResult]
3. 命名の具体例
プリミティブ型データ
検証内容 | テスト名 |
---|
整数の保存と読み出しが成功する | SaveAndLoad_Integer_ShouldSucceed |
文字列の非同期保存と読み出しが成功する | SaveAndLoadAsync_String_ShouldSucceed |
複雑なオブジェクト
検証内容 | テスト名 |
---|
複雑なオブジェクトの保存と読み出しが成功 | SaveAndLoad_Object_ShouldSucceed |
非同期処理の保存と読み出しが成功 | SaveAndLoadAsync_Object_ShouldSucceed |
ScriptableObject
のテスト
検証内容 | テスト名 |
---|
ScriptableObject の保存と読み出しが成功 | SaveAndLoad_ScriptableObject_ShouldSucceed |
非同期の保存と読み出しが成功 | SaveAndLoadAsync_ScriptableObject_ShouldSucceed |
エラーハンドリング
検証内容 | テスト名 |
---|
存在しないファイルの読み込みで例外発生 | Load_NonExistentFile_ShouldThrowException |
null を保存すると例外が発生 | Save_NullObject_ShouldThrowException |
テスト名の付け方の例外
1. 特別な状況を扱う場合
- テスト対象が非常に特殊な状況にある場合、その状況を明確にする。
- 例:
Load_WithCorruptedData_ShouldThrowException
(破損したデータの場合に例外が発生する)
2. パラメトリックテスト
- テストが複数の異なるデータセットを扱う場合、パラメータを含めることを検討。
- 例:
SaveAndLoad_WithVariousDataTypes_ShouldSucceed
(異なるデータ型を保存・読み出し)
良いテスト名の特徴
特徴 | 説明 |
---|
簡潔 | テストの内容を簡潔に表現する。長すぎる名前は避ける。 |
具体的 | 何をテストしているのか、具体的な動作や条件、結果を記述する。 |
一貫性がある | プロジェクト全体で同じ命名規則を使用し、誰が読んでも理解できる構造にする。 |
明確な期待 | 成功するのか失敗するのか、例外が発生するのかなど、テストの結果を明確に示す。 |
テスト名のアンチパターン
1. 曖昧な名前
[Test]
public void Test1() { }
- 問題点: テストの内容が全く分からない。
- 修正: 具体的な動作と結果を記述する。
2. 冗長な名前
[Test]
public void ThisTestChecksIfTheDataIsSavedAndThenLoadedCorrectly() { }
- 問題点: 冗長すぎて読むのが難しい。
- 修正: 簡潔に記述する。
- 修正例:
SaveAndLoad_Data_ShouldSucceed
3. 汎用的すぎる名前
[Test]
public void SaveTest() { }
- 問題点: 何を保存するのか、何を期待するのか分からない。
- 修正: 何をテストしているのか具体的に記述する。
- 修正例:
SaveAndLoad_Integer_ShouldSucceed
命名規則のまとめ
項目 | 内容 |
---|
言語 | テスト名は英語で記述する。 |
形式 | [動作]_[条件/状況]_[期待結果] の形式で命名する。 |
具体性 | テストの意図を具体的かつ簡潔に表現する。 |
期待結果 | 成功 (ShouldSucceed ) や失敗 (ShouldThrowException ) など、結果を明確に記述する。 |
一貫性 | プロジェクト全体で命名規則を統一する。 |
まとめ
適切なテスト名を付けることで、テストコードの可読性やデバッグ効率を大幅に向上させることができます。この資料を基にプロジェクト全体のテスト命名規則を統一し、テストの品質向上を図りましょう。
ディスカッション
コメント一覧
まだ、コメントがありません