私は最近、説明を最大限にするために、テスト、そのクラス、および含まれるプロジェクトに名前を付けるための次の規則を思いつきました。
名前空間Settings
のプロジェクトでクラスをテストしているとしましょう。MyApp.Serialization
まず、MyApp.Serialization.Tests
名前空間を使用してテスト プロジェクトを作成します。
このプロジェクトと名前空間内に、IfSettings
( IfSettings.csとして保存された) という名前のクラスを作成します。
SaveStrings()
メソッドをテストしているとしましょう。-> テストに名前を付けますCanSaveStrings()
。
このテストを実行すると、次の見出しが表示されます。
MyApp.Serialization.Tests.IfSettings.CanSaveStrings
これは、何をテストしているのかを非常によく表していると思います。
もちろん、英語では名詞「Tests」が動詞「tests」と同じであることは便利です。
テストに名前を付ける際の創造性に制限はありません。そのため、完全な文の見出しが得られます。
通常、テスト名は動詞で始まる必要があります。
例は次のとおりです。
- 検出 (例
DetectsInvalidUserInput
)
- スロー(例
ThrowsOnNotFound
)
- 意志 (例
WillCloseTheDatabaseAfterTheTransaction
)
等
別のオプションは、「if」の代わりに「that」を使用することです。
ただし、後者はキーストロークを節約し、テスト済みの動作が存在するかどうかはわかりませんが、存在するかどうかをテストしているため、何をしているのかをより正確に説明しています。
[編集]
上記の命名規則をもう少し長く使用した後、インターフェイスを操作するときにIf接頭辞が混乱を招く可能性があることがわかりました。たまたま、テスト クラスIfSerializer.csが、[開くファイル] タブのインターフェイスISerializer.csと非常によく似ています。これは、テスト、テスト対象のクラス、およびそのインターフェイスの間を行ったり来たりするときに非常に煩わしくなります。その結果、接頭辞としてIfではなくThatを選択するようになりました。
さらに、他の場所ではベスト プラクティスとは見なされないため、テスト クラスのメソッドに対してのみ使用します。次のように、テスト メソッド名の単語を区切るために「_」を使用します。
[Test] public void detects_invalid_User_Input()
こちらの方が読みやすいと思います。
【編集終了】
テストに名前を付けることが非常に重要であると考えているため、これによりいくつかのアイデアが生まれることを願っています。これにより、テストが何をしているのかを理解するために費やされていた時間を大幅に節約できるためです (たとえば、長期間の中断後にプロジェクトを再開した後)。 .