技術資料: テスト名の付け方

目的

テスト名は、テストコードの可読性と理解しやすさを高める重要な要素です。本資料では、適切なテストメソッド名の付け方を解説します。


テスト名の重要性

  1. テストの意図を明確にする:
    • テストが何を検証しているのかを一目で分かるようにします。
  2. ドキュメントとしての役割:
    • コードの仕様や意図を他の開発者が容易に理解できるようにします。
  3. デバッグの助け:
    • テストが失敗した際、問題の範囲をすぐに特定できるようにします。

テスト名の命名ルール

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) など、結果を明確に記述する。
一貫性プロジェクト全体で命名規則を統一する。

まとめ

適切なテスト名を付けることで、テストコードの可読性やデバッグ効率を大幅に向上させることができます。この資料を基にプロジェクト全体のテスト命名規則を統一し、テストの品質向上を図りましょう。

Unity,テスト

Posted by hidepon