回答:
単体テストと統合テストでは、少し異なるアプローチをとっています。できるだけ機能に基づいて名前を付けてみます。その後、すべてのテストに合格すると、機能する機能と機能しない機能のリストが表示されます。
このようにテストに名前を付けるのは必ずしも実用的ではありませんが、特に何百もの単体テストと統合テストを読んだ後は非常に役立ちます。これらのメソッドを保持するすべての包括的なクラス名も、テストされる機能を示しているはずです。組織化に役立ちます。
また、バグが修正されbugfix1002
たことを証明するために、一意のプレフィックスを付けてバグ修正のユニットテストに名前を付けることをお勧めします。
これは本当に単体テストを支援するために書かれましたが、おそらく同じルールが(多かれ少なかれ)統合テストに適用されることに気付くでしょう:
7つのステップをチェックしてください!
私の好みは、それを何と呼んでも、実際にはテストスイート名(カードのフィクスチャ名)、チェックしている効果、および目立つようにしてエラーの原因を明らかにする必要があるアサーションメッセージです。Asheroveのネーミングでそれが最も簡単だとわかったら、私はそれを心から支持します。しかし、おそらくコツは、「メソッド」の部分に、条件、結果、および例外が意味をなすもので埋めることです。
「MakingADeposit」という名前のスイートと「AccountDoesntExist」というテスト、および「予想されるNonesuchAccount例外-何も受信されませんでした」というエラーメッセージが表示されてうれしいです。
または、テストスイート名を「::」で区切っても構わない場合は、「AccountHandling :: MakingADeposit_AccountDoesntExist_ThrowsAnException」で問題ありません。
このカードは、適切な名前がない場合は、続行して、問題が発生したときにより適切な名前を付けることも推奨しています(できれば、CIにコードを送信する前に)。
統合テストは、各テストが要件の1つの側面をテストする必要があるが、システム全体をテストするという点で、単体テストと同様のいくつかのルールに従う必要があります。クラスは、テストされる全体的なものに名前を付ける必要があります。たとえば、「TpcInputValidation」とメソッドの名前は、過度に冗長になることなくテストが何をしようとしているのかを明示的に反映する必要があります。たとえば、「shouldRaiseValidationErrorWithBadDates()」
メソッドは機能の1つの概念をテストする必要があり、多数のアサートがそうでないことを示す可能性があります。(「クリーンコード:アジャイルソフトウェアクラフトマンシップのハンドブック」p。132、Robert Martinを参照)。
問題は、機能の適切な名前がメソッド名に対して長すぎるということですか?のような名前でテストメソッドの作成を開始するのは厄介でありregisterAndValidateUnderageUniversityDriverWithCoverageSetA_test()
、長いメソッド名のコンパイラルールに違反する可能性があります(PL / SQLでは最大30文字しか許可されません-JavaとC#がこのような短い名前の制限を課しているかどうかはわかりませんが、そうでない場合は、ある時点を過ぎてかなり手に負えなくなり、本当に長いメソッド名は、他の生成コードによって読み取られたり管理されたりする生成コードにのみ役立つ場合があります。あなたはそれを短くすることを試みることができますがregValUnderageUnivDrvrWCovrgA_test()
、それはまた読むのが本当にひどいです。私が使用したオプションのうち、私が気に入らなかったものの、当時は最良の選択でした。underageUnivDrvr_test_01()
そして、テスト対象の機能のより長い説明にメソッド名をマッピングするスプレッドシートがありました。醜いですが、うまくいきました。また、ソースファイルの関数のドキュメントにテストの説明を記載することもできます。これは、スプレッドシートとコード間でマッピングを行う代わりに、コードからテストのドキュメントを直接生成できるため便利です。