Question

J'utilise actuellement JUnit 4 et j'ai besoin de diviser mes tests en groupes pouvant être exécutés de manière sélective dans n'importe quelle combinaison. Je sais que TestNG dispose d'une fonctionnalité permettant d'annoter des tests pour les affecter à des groupes, mais je ne peux pas migrer vers TestNG pour le moment. Il semble que cela pourrait facilement être accompli dans JUnit avec des annotations personnalisées et un JUnit TestRunner personnalisé. J'ai vérifié les documents JUnit et cherché sur le Web, mais je n'ai rien trouvé de tel. Quelqu'un est-il au courant d'un tel TestRunner?

Mise à jour: Merci pour vos réponses concernant les suites de tests. J'aurais dû les aborder dans ma question initiale. On y va: je ne veux pas utiliser de suites de tests, car elles me demanderaient de les créer et de les gérer manuellement, ce qui implique de toucher TOUS mes tests et de les organiser manuellement en suites (trop de travail et un cauchemar de maintenance). Tout ce que j'ai à faire est d'exécuter tous les tests unitaires, à l'exception de quelques tests d'intégration. Je veux donc les annoter et les exécuter toutes. À d'autres moments, je veux simplement exécuter les tests d'intégration. J'ai également besoin de mettre un test unitaire dans plusieurs groupes, ce qui n'est pas possible avec les suites. J'espère que cela vous aidera à clarifier les choses.

Mise à jour 2: Si JUnit ne possède pas ce fichier OOB, je recherche une bibliothèque Open Source qui l’ajoute à JUnit (annotations + programme d’analyse de test JUnit personnalisé).

Était-ce utile?

La solution

Découvrez les sources SpringJUnit4ClassRunner . Je l'ai utilisé pour exécuter éventuellement des tests basés sur une propriété System, en utilisant IfProfileValue annotation.

Ceci:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
  public void testWhichRunsForUnitOrIntegrationTestGroups() {
      // ...
 }

S'exécutera si la propriété système 'groupes de tests' est définie sur 'tests unitaires' ou 'tests d'intégration'.

Mise à jour: JUnitExt a @Category et @Prerequisite annotations et ressemble à cela devrait faire ce que vous avez besoin. Cependant, je ne l'ai jamais utilisé moi-même, je ne peux donc pas en témoigner.

Autres conseils

JUnit n'a pas de tel coureur pour le moment. S'attaquer au problème sous-jacent, à savoir la nécessité d'obtenir une assurance raisonnable d'une suite de tests dans un temps limité, constitue notre priorité de développement la plus haute pour la prochaine version. En attendant, mettre en place un filtre qui fonctionne par annotations ne semble pas être un gros projet, même si je suis partial.

Tout d'abord, vous abordez deux problèmes: les tests unitaires (souvent dans le même package que l'unité testée) et les tests d'intégration. Je conserve généralement mes tests d'intégration dans un package séparé, quelque chose comme com.example.project.tests. Dans eclipse, mes projets ressemblent à:

project/
  src/
    com.example.project/
  tsrc/
    com.example.project/
    com.example.project.tests/

En cliquant avec le bouton droit de la souris sur un package et en sélectionnant "Exécuter", les tests du package sont exécutés; faire la même chose sur le dossier source exécute tous les tests.

Vous pouvez obtenir un effet similaire, bien que vous ayez exprimé votre désintérêt, en utilisant le Coureur de la suite . Cependant, cela enfreint DRY - vous devez conserver des copies des noms de test à jour dans les classes de la suite. Cependant, vous pouvez facilement mettre le même test dans plusieurs suites.

@RunWith(Suite.class)
@Suite.SuiteClasses( { 
    TestAlpha.class, 
    TestBeta.class })
public class GreekLetterUnitTests {
}

Bien sûr, je devrais vraiment garder ces choses automatisées. Une bonne méthode consiste à utiliser la la tâche Ant .

<target name="tests.unit">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/Test*.java"/>
        <exclude name="**/tests/*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
<target name="tests.integration">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/tests/Test*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>

Non, il n’existe malheureusement pas de concept similaire aux groupes TestNG. C'était prévu pour JUnit4, mais pour des raisons peu claires, il a été retiré du planning.

Vous pouvez créer des suites, même si cela place toute la configuration dans la suite et non dans les annotations.

JUnit 3 vous permet de créer des suites de tests pouvant être exécutés comme tout autre test. JUnit 4 n’a-t-il pas un concept similaire?

Si vous utilisez ANT ou maven, vous pouvez contrôler quels tests sont exécutés en les filtrant par nom. Un peu gênant, mais cela pourrait fonctionner pour vous.

TestNG a mon vote. Il est basé sur des annotations, peut être exécuté en tant que groupes, tests simples, etc., peut être lié à Maven et peut exécuter tous les tests JUnit dans le cadre de ses essais.

Je le recommande vivement pour JUnit.

Mon conseil est simplement de laisser JUnit et d’utiliser TestNG. Une fois que vous vous êtes habitué à TestNG, Junit ressemble à l'âge de pierre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top