Question

Je veux être en mesure d'exécuter tous les tests dans un projet d'un programme. Je sais que Eclipse a un « Exécuter en tant que test JUnit » configuration qui prend en quelque sorte tous les tests dans un projet et de les exécuter. Est-il possible pour moi de saisir aussi la liste des tests et de les exécuter par programme? Ou est-il une bonne façon de construire une suite de tests contenant tous les cas de test sans liste manuellement tous (tous 700+) d'entre eux?

Je l'ai essayé le "New ... -> Test Suite" option dans Eclipse, mais cela semble fonctionner que pour JUnit 3, l'identification des tests par leur extension de TestCase

Les classes de test sont JUnit 4, de sorte que leur caractéristique distinctive est seulement l'annotation, aucune convention de nommage, pas de sous-classement TestCase.

Merci d'avance!

Était-ce utile?

La solution

Bien qu'il ne résout pas vraiment votre problème immédiat, je trouve très utile la pratique générale pour créer des suites et des suites de suites, par exemple pour un paquet quelque chose comme PackageFooSuite etc. et assembler ces suites en une ou plusieurs suites à nouveau, comme ModuleFooSuite et ont une suite de haut niveau, comme AllTestsSuite. De cette façon, il est facile de courir à la fois tous les tests en une seule étape, ainsi que des tests de sous-module pour le paquet je travaille actuellement sur (et ont les tests exécutés plus rapidement que si je serais toujours courir tous):

@RunWith(Suite.class)
@Suite.SuiteClasses({ PackageFooSuite.class, PackageBarSuite.class} )
public final class AllTestsSuite {} // or ModuleFooSuite, and that in AllTests

Autres conseils

Aucune des autres réponses qu'il a fait pour moi. J'ai eu 40k tests que je devais courir, donc manuellement chaque classe listage n'a pas été une option.

Je l'ai fait avec ClasspathSuite . Une suite de test qui exécute tous les tests junit4 et Junit3 dans le chemin de classe est la suivante:

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import static org.junit.extensions.cpsuite.SuiteType.*;

@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
        /* main method not needed, but I use it to run the tests */
        public static void main(String args[]) {
                JUnitCore.runClasses(RunAllSuite.class);
        }
}

Je avais besoin de l'exécuter à partir de la ligne de commande, donc ce que je l'ai fait:

  1. Téléchargé cp-1.2.6.jar
  2. Créez le RunAllSuite mentionné précédemment
  3. Compiler la classe, javac RunAllSuite.java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar
  4. exécuter des tests cibles dans le chemin de la classe, java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar;path/to/runallsuite/folder;target/classes;target/test-classes RunAllSuite

Et voilà. Avec le RunAllSuite ci-dessus, ne importe où dans votre code, vous pouvez juste faire JUnitCore.runClasses (RunAllSuite.class), qui se déroule tous les tests dans le chemin de la classe. Il existe d'autres options de configuration et qui sont expliqués dans la page d'accueil ClasspathSuite.

Notez également que la classe donnée ci-dessus n'imprime rien. Si cela est nécessaire, vous pouvez faire

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import org.junit.internal.TextListener;
import static org.junit.extensions.cpsuite.SuiteType.*;

@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
        public static void main(String args[]) {
                JUnitCore junit = new JUnitCore();
                junit.addListener(new TextListener(System.out));
                junit.run(RunAllSuite.class);
        }
}

Vous pouvez le faire assez facilement à l'intérieur maven en utilisant surefire plug-in : Je habituellement propre / compilation / installation mes projets à partir de la ligne de commande avant de les comparer pour l'utilisation de cette éclipse (mvn eclipse:clean eclipse:eclipse) et vous pouvez définir une suite de test dans votre pom qui répertorie tous les tests que vous souhaitez exécuter en masse chaque fois que vous exécutez mvn install . Vous n'êtes pas les appeler programatically, exactement, mais vous pouvez certainement les appeler en masse.

Dans Eclipse (j'utilise 4.6.1) - Clic droit sur le dossier du projet, sélectionnez "Exécuter en tant que", choisissez "Test JUnit"

Il se déroulera tous les tests dans ce projet. Même chose pour un paquet.

Du haut de ma tête avec Spring:

  • Mettre en œuvre un typeFilter qui correspond à des classes avec des méthodes annotées avec @Test (ne pas oublier de prendre en compte les superclasses)
  • Invoke balayage classpath sur votre haut plus paquet de test
  • Invoquer la JUnitRunner avec les résultats d'analyse

Plus d'informations sur la numérisation classpath et filtres type personnalisé ici

Avec Eclipse Indigo (peut-être Helios aussi) dans la boîte de dialogue Exécuter Configurations, vous avez maintenant la possibilité d'exécuter tous les tests dans un projet sélectionné, l'emballage ou le dossier source.

Aussi une bonne référence d'Eclipse est l'article .

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