105 votes

Exécuter un test unique à partir d'une classe JUnit à l'aide de la ligne de commande

J'ai été en regardant autour de lui, mais je n'ai pas trouvé toute approche qui va me permettre d'exécuter un test unique à partir d'une classe JUnit en utilisant uniquement la ligne de commande.

Je peux exécuter l'ensemble des tests à partir de la classe en utilisant les éléments suivants:

java -cp .... org.junit.runner.JUnitCore org.package.classname


Ce que je veux vraiment, c'est quelque chose comme ceci:

java -cp .... org.junit.runner.JUnitCore org.package.classname.method

ou

java -cp .... org.junit.runner.JUnitCore org.package.classname#method


J'ai remarqué qu'il y a peut-être des moyens de faire cela en utilisant JUnit annotations, mais je préfère ne pas modifier le code source de mes classes de test à la main (la tentative d'automatiser cette). Je l'ai fait aussi voir que Maven peut avoir une façon de le faire, mais si possible j'aimerais ne pas dépendre de Maven.

Alors je me demande si il n'y a aucune façon de le faire?


Keypoints je suis à la recherche de:

  • Possibilité d'exécuter un test unique à partir d'une classe de test JUnit
  • Ligne de commande (en utilisant JUnit)
  • Éviter de modifier la source de test
  • Évitez d'utiliser des outils supplémentaires

83voto

Mark Peters Points 42201

Vous pouvez faire un personnalisé, barebones runner JUnit assez facilement. En voici un qui va exécuter une seule méthode de test sous la forme com.package.TestClass#methodName:

public class SingleJUnitTestRunner {
    public static void main(String... args) throws ClassNotFoundException {
        String[] classAndMethod = args[0].split("#");
        Request request = Request.method(Class.forName(classAndMethod[0]),
                classAndMethod[1]);

        Result result = new JUnitCore().run(request);
        System.exit(result.wasSuccessful() ? 0 : 1);
    }
}

Vous pouvez l'appeler comme ceci:

> java -cp path/to/testclasses:path/to/junit-4.8.2.jar SingleJUnitTestRunner 
    com.mycompany.product.MyTest#testB

Après un rapide coup d'oeil dans la JUnit source je suis venu à la même conclusion que vous que JUnit ne prend pas en charge ce mode natif. Cela n'a jamais été un problème pour moi depuis IDEs tous ont personnalisé JUnit intégrations qui vous permettent d'exécuter la méthode d'essai sous le curseur, entre autres actions. Je n'ai jamais couru JUnit tests à partir de la ligne de commande directement; j'ai toujours laisser soit l'IDE ou l'outil build (Ant, Maven) prendre soin d'elle. Surtout depuis la CLI par défaut du point d'entrée (JUnitCore) ne produit pas de résultat de sortie autre qu'un code de sortie non nulle sur l'échec du test(s).

56voto

Yiling Lu Points 396

J'utilise Maven pour construire mon projet et j'utilise le plug-in SureFire maven pour exécuter des tests Junit. Si vous avez cette configuration, alors vous pouvez faire:

 mvn -Dtest=GreatTestClass#testMethod test
 

Dans cet exemple, nous venons d'exécuter une méthode de test nommée "testMethod" dans la classe "GreatTestClass".

Pour plus de détails, consultez http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html

Bon test!

-2voto

Benjamin Tan Points 6541

Nous avons utilisé IntelliJ et avons passé pas mal de temps à essayer de le comprendre également.

En gros, il s’agit de 2 étapes:

Étape 1: compiler la classe de test

% javac -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" SetTest.java

Étape 2: lancer le test

% java -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" org.junit.runner.JUnitCore SetTest

Terminé!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X