1. ホーム
  2. unit-testing

[解決済み] ユニットテストの命名のベストプラクティス [終了しました]。

2022-03-15 11:56:32

質問

ユニットテストのクラスとテストメソッドの命名に関するベストプラクティスは何ですか?

これは以前SOで議論されたもので、以下の通りです。 ユニットテストの命名規則でよく使われるものは何ですか?

これが非常に良いアプローチかどうかは分かりませんが、現在私のテストプロジェクトでは、各プロダクションクラスとテストクラスの間に一対一のマッピングを設定しています。 ProductProductTest .

テストクラスには、テストするメソッドの名前とアンダースコア、そして状況や期待することを書いたメソッドを用意しています。 Save_ShouldThrowExceptionWithNullName() .

解決方法は?

アップデート(2021年7月)

私の最初の回答からかなり時間が経ち(約12年)、この間ベストプラクティスは大きく変化しています。そこで、私自身の回答を更新し、読者の皆様に異なるネーミング戦略を提案したいと思います。

多くのコメントや回答で、私が最初の回答で提案した命名方法はリファクタリングに強くなく、分かりにくい名前になってしまうという指摘がありましたが、私も全く同感です。

この数年、私はより人間にとって読みやすい命名法を使うことにしました。 ウラジミール・コリコフ .

いくつかの例を挙げよう。

  • Add_credit_updates_customer_balance
  • Purchase_without_funds_is_not_possible
  • Add_affiliate_discount

しかし、ご覧のようにかなり柔軟なスキーマですが、最も重要なことは、名前を読めば、時間とともに変化する可能性のある技術的な詳細を含めずに、そのテストが何であるかがわかるということです。

プロジェクトとテストクラスの名前付けは、今でもオリジナルの回答スキーマに準拠しています。

当初の回答(2009年10月)

好きなもの ロイ・オシェロブのネーミング戦略 . それは次のようなものです。

[UnitOfWork_StateUnderTest_ExpectedBehavior]

メソッド名に必要なすべての情報を、構造的に備えている。

作業単位は、1つのメソッド、1つのクラスというように小さくても、複数のクラスというように大きくてもよい。このテストケースでテストされるもので、制御下にあるものをすべて表す必要があります。

アセンブリの場合、私は典型的な .Tests で終わるのは、かなり普及していると思いますし、クラスについても同じです。 Tests ):

[NameOfTheClassUnderTestTests]

以前はTestsの代わりにFixtureをサフィックスとして使っていましたが、後者の方が一般的だと思うので、命名方法を変更しました。