web-dev-qa-db-ja.com

命名規則JUnitサフィックスまたはプレフィックステスト

テスト対象クラスMyClass.Java JUnitテストケース名の代替:

TestMyClass.Java
MyClassTest.Java

http://moreunit.sourceforge.net は、プレフィックスのデフォルトとして「テスト」を使用しているようですが、両方の使用を見てきました。 Eclipseで単体テストとしてプロジェクト全体を実行すると、@ Testに対して解析されるのはクラス内の注釈であるため、両方が認識されるようです。 Mavenも同じことをしていると思います。

どちらが好ましいですか?

49
aron

サフィックスの別の引数-少なくとも英語では:

クラスは通常名詞を表し、概念のモデルです。テストの1つのインスタンスは「MyClassテスト」です。対照的に、メソッドは「テスト[the]計算[メソッド]」のような、ある種のアクションをモデル化します。

このため、テストクラスには常に「接尾辞」を使用し、テストメソッドには接頭辞を使用します。

the MyClass test          --> MyClassTest
test the calculate method --> testCalculate()
83
Andreas_D

私は接尾辞を使用することを好みます-それはディレクトリ内のファイルのリストを調べることがより簡単であることを意味します:意味のある何かを得るために最初の4文字を精神的に無視する必要はありません。 (実稼働コードとは別のディレクトリにテストがあると仮定しています。)

また、EclipseでOpen Type(Ctrl-T)を使用すると、実動コードとそのテストの両方が同時に表示されることになります...これは、do n'tテストクラスを参照してください:)

52
Jon Skeet

JUnit 4より前は、テストクラスにSomethingTestという名前を付け、*Test.Javaに一致するすべてのクラスでJUnitを実行するのが一般的でした。最近のアノテーション駆動型のJUnit 4では、テストメソッドに@Testアノテーションを付けて完了させるだけです。テストクラスは実際のソース(src/のテストクラスtest/のソース)とは異なるディレクトリ構造の下にある可能性が高いため、最近のプレフィックス/サフィックスはほとんど関係ありません。

9
krock

TestClassName構文を使用することを好みます。他の構文を使用する場合、両方を開いているときに、どちらがテストで、どちらがエディターの実際のクラスであるかを識別するのに問題があります。名前の最後の4文字を探すのは面倒であり、これらの文字が常に表示されるとは限りません。

私にとって、他の構文は毎日ファイル間のいくつかの間違ったスワッピングにつながり、それは時間がかかります。

5
Pablo Jomer

誰も気分を害することはありませんが、「moreunit」はJUnitよりも知名度が低く、JUnitはほとんど遍在しており、テストクラス「Test」の接尾辞の規則を確立していると言ってもいいと思います。

JUnit4は、クラスとメソッドの両方の命名規則(「ポストフィックステスト」と「プレフィックステスト」)に従う必要性をなくしましたが、明確にするために両方ともまだ役立つと思います。

Src/main/Java /.../ MyClass.myMethod()...によってsrc/test/Java /.../ MyClass.myMethod()がテストされることの恐怖を想像してください...

JUnit3の規則とは異なることが便利な場合があります。セットアップメソッドの名前(「createTestFactory()」)に名前を付け、「@ Before」に注釈を付けることは、汎用の「setUp()」よりもはるかに明確です。

これは、いくつかの無関係なセットアップアクションを実行する必要がある場合に特に役立ちます。これらのアクションは、@ Beforeでタグ付けされた別々のメソッドで実行できます。これは、アクションの独立性を非常にうまく伝えます。

単独で作業している場合は、テストに快適に感じることが重要だと思います。しかし、グループに参加している場合は、座って何かを直した方が良いでしょう。私は個人的にはクラスのサフィックスとメソッドのプレフィックスを使用する傾向があり、自分のグループがこの規則に適応するようにします。

2
eytanfb

また、テストを複数のクラスに分割する場合にもMyClassTest_XXXを使用します。これは、大きなクラスをテストするときに便利で、テストを論理的にグループ化する必要があります。 (レガシーコードを制御できないため、このシナリオが発生します。)その後、KitchenSinkTest_ForArray、KitchSinkTest_ForCollectionなどのようなものがあります。

1
Jeanne Boyarsky

MyClassTestsをお勧めします。

クラスは名詞句である必要があるため、一般的に使用されるMyClassTestおよびあまり一般的ではないMyClassTestsまたはMyClassTestCaseまたはMyClassTestFixtureはすべて機能します。技術的には、JUnitテストクラスのインスタンスは テストフィクスチャ を表しますが、TestFixtureは私にとって少し冗長です。

通常、クラスには複数のテストメソッドがあり、それぞれが1つのテスト(テストケース)を表しているため、MyClassTestsは最適な方法で意図を伝えると思います。

0
DKroot