22 votes

Comment lancer JUnit 5 (Platform) depuis la ligne de commande (sans Maven/Gradle) ?

J'aimerais exécuter une classe contenant des tests JUnit 5 à partir de la ligne de commande. Malheureusement, j'ai quelques dépendances extérieures qui m'empêchent d'utiliser Maven, Gradle ou d'autres systèmes de construction.

Dans JUnit 4, je pourrais accomplir ceci comme suit

java .:"lib/*" org.junit.runner.JUnitCore TestClass

Existe-t-il un équivalent pour JUnit 5 ? J'aimerais simplement savoir si le test réussit comme lorsqu'il s'exécute dans IntelliJ.

TestClass.java

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Collections;

import static org.junit.jupiter.api.Assertions.*;

public class TestClass {

    private static ArrayList<Student> students;
    private static ArrayList<Student> inAgeOrderStudents;
    private static ArrayList<Student> inNameOrderStudents;

    @BeforeAll
    static void setUp(){
        initializeStudents();
        initSortedAgeStudents();
        initSortedNameStudents();
    }

    @BeforeEach
    void reloadStudents() {
        Collections.shuffle(students);
    }

   static void initializeStudents(){
        students = new ArrayList<Student>();

        students.add(new Student(18, "Tim"));
        students.add(new Student(18, "Tim"));
        students.add(new Student(16, "Jean"));
        students.add(new Student(14, "Lin"));
        students.add(new Student(19, "Sam"));
    }

    static void initSortedAgeStudents(){
        inAgeOrderStudents = new ArrayList<Student>();
        inAgeOrderStudents.add(new Student(14, "Lin"));
        inAgeOrderStudents.add(new Student(16, "Jean"));
        inAgeOrderStudents.add(new Student(18, "Tim"));
        inAgeOrderStudents.add(new Student(18, "Tim"));
        inAgeOrderStudents.add(new Student(19, "Sam"));
    }

    static void initSortedNameStudents(){
        inNameOrderStudents = new ArrayList<Student>();
        inNameOrderStudents.add(new Student(16, "Jean"));
        inNameOrderStudents.add(new Student(14, "Lin"));
        inNameOrderStudents.add(new Student(19, "Sam"));
        inNameOrderStudents.add(new Student(18, "Tim"));
        inNameOrderStudents.add(new Student(18, "Tim"));
    }

    @Test
    void testMergeSort() {
        assertNotEquals(students, inAgeOrderStudents);
        StudentSortSearch.mergesort(students,StudentSortSearch.SortSearchCriteria.AGE);
        assertEquals(14,students.get(0).getAge());
        assertEquals(19,students.get(4).getAge());
        assertEquals(students, inAgeOrderStudents);

        assertEquals(true,students.equals(inAgeOrderStudents));
    }

    @Test
    void testQuickSort() {
        StudentSortSearch.quickSort(students,StudentSortSearch.SortSearchCriteria.NAME);
        assertEquals("Jean",students.get(0).getName());
        assertEquals("Tim",students.get(4).getName());

        assertEquals(students, inNameOrderStudents);
    }

    @Test
    void testBinarySearch() {
        StudentSortSearch searcher = new StudentSortSearch();
        ArrayList<Student> searchResults = searcher.binarySearch(students, 18);
        assertEquals(2, searchResults.size());
        assertEquals(18,searchResults.get(1).getAge());
        assertEquals(18,searchResults.get(0).getAge());

        searchResults = searcher.binarySearch(students, "Lin");
        assertEquals(1, searchResults.size());
        assertEquals(14,searchResults.get(0).getAge());
    }
}

40voto

Sormuras Points 2499

Bien sûr, utilisez le ConsoleLauncher .

El ConsoleLauncher est une application Java en ligne de commande qui vous permet lancer le Plate-forme JUnit de la console. Par exemple, il peut être utilisé pour exécuter JUnit Vintage y JUnit Jupiter tests et test d'impression dans la console.

Un exécutable *junit-platform-console-standalone-<version>.jar* avec toutes les dépendances incluses est publié dans le dépôt central de Maven sous le junit-platform-console-standalone répertoire. Vous pouvez exécuter le ConsoleLauncher autonome comme indiqué ci-dessous.

java -jar junit-platform-console-standalone-<version>.jar <Options>

Pour plus de détails sur les options, consultez https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher s'il vous plaît.

Adapté à votre exemple et utilisant la version de JUnit Platform 1.3.1 les commandes pourraient ressembler à celles-ci :

$ mkdir out
$ javac -d out Student.java StudentSortSearch.java
$ javac -d out -cp out:junit-platform-console-standalone-1.3.1.jar TestClass.java
$ java -jar junit-platform-console-standalone-1.3.1.jar --class-path out --scan-class-path

 JUnit Jupiter 
   TestClass 
      test() 
 JUnit Vintage 

Test run finished after 67 ms
...

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