目的
テスト名は、テストコードの可読性と理解しやすさを高める重要な要素です。本資料では、適切なテストメソッド名の付け方を解説します。
テスト名の重要性
- テストの意図を明確にする:
- テストが何を検証しているのかを一目で分かるようにします。
 
 
- ドキュメントとしての役割:
- コードの仕様や意図を他の開発者が容易に理解できるようにします。
 
 
- デバッグの助け:
- テストが失敗した際、問題の範囲をすぐに特定できるようにします。
 
 
テスト名の命名ルール
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) など、結果を明確に記述する。 | 
| 一貫性 | プロジェクト全体で命名規則を統一する。 | 
 
まとめ
適切なテスト名を付けることで、テストコードの可読性やデバッグ効率を大幅に向上させることができます。この資料を基にプロジェクト全体のテスト命名規則を統一し、テストの品質向上を図りましょう。
訪問数 71 回, 今日の訪問数 1回
 
 
ディスカッション
コメント一覧
まだ、コメントがありません