Convention de nommage Suffixe ou préfixe JUnit Test

Classe sous test MyClass.java JUnit nom de cas de test alternatives:

TestMyClass.java MyClassTest.java 

http://moreunit.sourceforge.net semble utiliser “Test” comme préfixe par défaut mais j’ai vu les deux utilisations. Les deux semblent être reconnus lors de l’exécution du projet entier en tant que test unitaire dans eclipse, car ce sont les annotations à l’intérieur des classes qui sont analysées pour @Test. Je suppose que Maven fait la même chose.

Quel est préféré?

Un autre argument pour le suffixe – au moins en anglais:

Une classe représente généralement un nom , c’est un modèle de concept. Une instance de l’un de vos tests serait un «test MyClass». En revanche, une méthode modéliserait un type d’action, comme «testez [la] méthode [calcul]».

Pour cette raison, j’utiliserais toujours le suffixe pour les classes de test et le préfixe pour les méthodes de test:

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

Je préfère utiliser le suffixe – cela signifie que regarder la liste des fichiers dans un répertoire est plus simple: vous n’avez pas à ignorer mentalement les quatre premières lettres pour arriver à quelque chose de significatif. (Je suppose que vous avez déjà les tests dans un répertoire différent du code de production.)

Cela signifie également que lorsque vous utilisez Open Type (Ctrl-T) dans Eclipse, vous finissez par voir le code de production et son test simultanément … ce qui est également un rappel si vous ne voyez pas de classe de test: )

Avant JUnit 4, il était courant de nommer vos classes de test SomethingTest, puis d’exécuter JUnit dans toutes les classes correspondant à *Test.java . Ces jours-ci, JUnit 4 a pour but d’annoter vos méthodes de test avec @Test et de les @Test . Vos classes de test seront probablement sous une structure de répertoires différente de celle de votre source réelle (source dans les classes src/ test dans test/ ). Par conséquent, les préfixes / suffixes sont aujourd’hui largement hors de propos.

Sans vouloir offenser personne, je pense qu’il est juste de dire que “moreunit” est beaucoup moins connu que JUnit, qui est quasiment omniprésent, et a établi la convention de suffixage des classes de test “Test”.

Bien que JUnit4 ait éliminé la nécessité de suivre à la fois les conventions de dénomination de classe et de méthode (resp. “Test postfix” et “test de préfixe”), je pense que les deux sont encore utiles pour plus de clarté.

Imaginez l’horreur d’avoir src / test / java /…/ MyClass.myMethod () testé par src / main / java /…/ MyClass.myMethod () …

Parfois, il est utile de s’écarter des conventions JUnit3 – Je trouve que nommer les méthodes d’installation après ce qu’elles font (“createTestFactory ()”) et les annoter “@Before” est beaucoup plus clair que le générique “setUp ()”.

Ceci est particulièrement utile lorsque plusieurs actions de configuration non liées doivent être effectuées – elles peuvent être exécutées selon des méthodes distinctes, chacune avec un tag @Before. Cela communique très bien l’indépendance des actions.

Je préfère utiliser la syntaxe TestClassName. Lorsque j’utilise l’autre syntaxe, j’ai du mal à identifier quel est le test et quelle est la classe réelle dans les éditeurs lorsque les deux sont ouverts. Devoir chercher les quatre dernières lettres du nom est fastidieux et ces lettres ne sont pas toujours affichées.

Pour moi, l’autre syntaxe conduit à plusieurs échanges erronés entre les fichiers chaque jour et cela prend du temps.

Je pense qu’il est important que vous vous sentiez à l’aise avec vos tests si vous travaillez seul. Mais si vous êtes en groupe, vous devriez vous asseoir et obtenir quelque chose de fixe. J’ai personnellement tendance à utiliser le suffixe pour les classes et le préfixe pour les méthodes et à essayer que mes groupes s’adaptent à cette convention.

J’utilise également MyClassTest_XXX lorsque je souhaite diviser mon test en plusieurs classes. Ceci est utile pour tester une grande classe et je souhaite que les tests soient regroupés de manière logique. (Je ne peux pas contrôler le code hérité pour que ce scénario apparaisse.) J’ai ensuite quelque chose comme KitchenSinkTest_ForArray, KitchSinkTest_ForCollection, etc.

Je suggère MyClassTests .

Les classes doivent être des phrases nominales, si communément utilisées MyClassTest et moins courantes MyClassTests ou MyClassTestCase ou MyClassTestFixture . Techniquement, une instance d’une classe de test JUnit représente un assembly de test , mais TestFixture est un peu trop verbeux pour moi.

Je pense que MyClassTests transmet l’intention de la meilleure façon, car il y a généralement plusieurs méthodes de test dans une classe, chacune représentant un test unique (cas de test).

Je préfère le suffixe: TestCase. Ceci est cohérent avec: http://xunitpatterns.com/Testcase%20Class.html