[解決済み] ユニットテストの命名のベストプラクティス [終了しました]。
質問
ユニットテストのクラスとテストメソッドの命名に関するベストプラクティスは何ですか?
これは以前SOで議論されたもので、以下の通りです。 ユニットテストの命名規則でよく使われるものは何ですか?
これが非常に良いアプローチかどうかは分かりませんが、現在私のテストプロジェクトでは、各プロダクションクラスとテストクラスの間に一対一のマッピングを設定しています。
Product
と
ProductTest
.
テストクラスには、テストするメソッドの名前とアンダースコア、そして状況や期待することを書いたメソッドを用意しています。
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をサフィックスとして使っていましたが、後者の方が一般的だと思うので、命名方法を変更しました。
関連
-
[解決済み] jest.fn()の機能と使い方を教えてください。
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] ユニットテストの妥当なコードカバレッジは何%ですか(とその理由)?[クローズド]です。
-
[解決済み] 抽象クラスをユニットテストする方法:スタブで拡張する?
-
[解決済み] データベース駆動型アプリケーションのユニットテストに最適な戦略とは?
-
[解決済み】ユニットテストと機能テストの違いは何ですか?
-
[解決済み】ユニットテストを実行せずにMavenプロジェクトをビルドする
-
[解決済み] GUIをユニットテストするにはどうしたらいいですか?
-
[解決済み] スタブとは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] モッキングとは?
-
[解決済み] NUnit vs. MbUnit vs. MSTest vs. xUnit.net [終了しました。]
-
[解決済み】ユニットテストとは何ですか?[クローズド]
-
[解決済み】Unit Testsの一般的な命名規則にはどのようなものがありますか?[クローズド]。
-
[解決済み] モックオブジェクトは何のためにあるのか?
-
[解決済み] Spring Dataのリポジトリをテストするには?
-
[解決済み】ユニットテストについて語るときの「DAMP not DRY」の意味とは?
-
[解決済み] RSpec vs Cucumber (RSpecの話) [終了しました。]
-
[解決済み] Junit: 統合テストと単体テストの分割
-
[解決済み] Enzyme - How to access and set <input> value?