統合テストの名前の選択


13

単体テストを使用すると、ドメインが非常に小さくなるため、簡単です。私はオセロベのmethodName_conditions_result()スキームを使用しましたが、それは非常に明確でした。

しかし、統合テストでは、非常に長い名前になると思いmethodNameます。代わりに何を入れますか?統合テストクラスに名前を付けるにはどうすればよいですか?

統合テスト名の実際の例は大歓迎です。答えがこれらのテストをよりよく理解するのにも役立つことを願っています。


1
なぜこの質問は(2回)反対​​投票されたのですか?
12

回答:


6

単体テストと統合テストでは、少し異なるアプローチをとっています。できるだけ機能に基づいて名前を付けてみます。その後、すべてのテストに合格すると、機能する機能と機能しない機能のリストが表示されます。

  • canRegisterUser
  • canHandleInvalidInput
  • canRelayDocumentBetweenServers
  • canCreateSchema
  • canLoginUsingWebService
  • canLoginUsingBasicAuth
  • canDeleteDocument
  • canAddDocument

このようにテストに名前を付けるのは必ずしも実用的ではありませんが、特に何百もの単体テストと統合テストを読んだ後は非常に役立ちます。これらのメソッドを保持するすべての包括的なクラス名も、テストされる機能を示しているはずです。組織化に役立ちます。

また、バグが修正されbugfix1002たことを証明するために、一意のプレフィックスを付けてバグ修正のユニットテストに名前を付けることをお勧めします。


5

これは本当に単体テストを支援するために書かれましたが、おそらく同じルールが(多かれ少なかれ)統合テストに適用されることに気付くでしょう:

7つのステップをチェックしてください!

私の好みは、それを何と呼んでも、実際にはテストスイート名(カードのフィクスチャ名)、チェックしている効果、および目立つようにしてエラーの原因を明らかにする必要があるアサーションメッセージです。Asheroveのネーミングでそれが最も簡単だとわかったら、私はそれを心から支持します。しかし、おそらくコツは、「メソッド」の部分に、条件、結果、および例外が意味をなすもので埋めることです。

「MakingADeposit」という名前のスイートと「AccountDoesntExist」というテスト、および「予想されるNonesuchAccount例外-何も受信されませんでした」というエラーメッセージが表示されてうれしいです。

または、テストスイート名を「::」で区切っても構わない場合は、「AccountHandling :: MakingADeposit_AccountDoesntExist_ThrowsAnException」で問題ありません。

このカードは、適切な名前がない場合は、続行して、問題が発生したときにより適切な名前を付けることも推奨しています(できれば、CIにコードを送信する前に)。


2

統合テストは、各テストが要件の1つの側面をテストする必要があるが、システム全体をテストするという点で、単体テストと同様のいくつかのルールに従う必要があります。クラスは、テストされる全体的なものに名前を付ける必要があります。たとえば、「TpcInputValidation」とメソッドの名前は、過度に冗長になることなくテストが何をしようとしているのかを明示的に反映する必要があります。たとえば、「shouldRaiseValidationErrorWithBadDates()」

メソッドは機能の1つの概念をテストする必要があり、多数のアサートがそうでないことを示す可能性があります。(「クリーンコード:アジャイルソフトウェアクラフトマンシップのハンドブック」p。132、Robert Martinを参照)。


「1つの機能」が「1つのアサート」に相当すると一般に考えているのはなぜですか。システムが想定している状態にあることをアサートしたいようです。アサートはいくつでもかまいません。しかし、問題はネーミングについてであり、統合テストをどのように記述するかではないので、私は余談です。
Jeremy Heiler、2012年

@Andrew、それは難しい規則だとは言いませんでしたが、アサートの数を監視することは、機能の概念をテストするためのガイドラインとして役立ちます。それらの範囲をいくらか制限することで、障害が発生したときに問題がどこにあるかを特定するのに役立ちます。しかし、私はあなたが1つの主張を言うのは素晴らしいことではないとあなたに与えます、そして私はそれを編集します、ありがとう。
ターンキー

1

問題は、機能の適切な名前がメソッド名に対して長すぎるということですか?のような名前でテストメソッドの作成を開始するのは厄介でありregisterAndValidateUnderageUniversityDriverWithCoverageSetA_test()、長いメソッド名のコンパイラルールに違反する可能性があります(PL / SQLでは最大30文字しか許可されません-JavaとC#がこのような短い名前の制限を課しているかどうかはわかりませんが、そうでない場合は、ある時点を過ぎてかなり手に負えなくなり、本当に長いメソッド名は、他の生成コードによって読み取られたり管理されたりする生成コードにのみ役立つ場合があります。あなたはそれを短くすることを試みることができますがregValUnderageUnivDrvrWCovrgA_test()、それはまた読むのが本当にひどいです。私が使用したオプションのうち、私が気に入らなかったものの、当時は最良の選択でした。underageUnivDrvr_test_01()そして、テスト対象の機能のより長い説明にメソッド名をマッピングするスプレッドシートがありました。醜いですが、うまくいきました。また、ソースファイルの関数のドキュメントにテストの説明を記載することもできます。これは、スプレッドシートとコード間でマッピングを行う代わりに、コードからテストのドキュメントを直接生成できるため便利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.