Java 如何从命令行(没有 Maven/Gradle)启动 JUnit 5(平台)?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/52373469/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 00:25:55  来源:igfitidea点击:

How to launch JUnit 5 (Platform) from the command line (without Maven/Gradle)?

javaunit-testingcommand-linejunit5

提问by Rachel H

I'd like to run a class containing JUnit 5 tests from the command line. Unfortunately, I have some outside dependencies that prevent me from using Maven, Gradle, or other build systems.

我想从命令行运行一个包含 JUnit 5 测试的类。不幸的是,我有一些外部依赖项阻止我使用 Maven、Gradle 或其他构建系统。

In JUnit 4, I could accomplish this like

在 JUnit 4 中,我可以像这样完成这个

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

Is there an equivalent for JUnit 5? I'd simply like to know if test succeeded similar to when it runs in IntelliJ.

JUnit 5 是否有等价物?我只是想知道测试是否成功,类似于在 IntelliJ 中运行时的情况。

TestClass.java

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());
    }
}

回答by Sormuras

Sure, use the ConsoleLauncher.

当然,使用ConsoleLauncher.

The ConsoleLauncheris a command-line Java application that lets you launch the JUnit Platformfrom the console. For example, it can be used to run JUnit Vintageand JUnit Jupitertests and print test execution results to the console.

An executable *junit-platform-console-standalone-<version>.jar*with all dependencies included is published in the central Maven repository under the junit-platform-console-standalonedirectory. You can run the standalone ConsoleLauncher as shown below.

ConsoleLauncher是一个命令行 Java 应用程序,可让您从控制台启动JUnit 平台。例如,它可用于运行JUnit VintageJUnit Jupiter测试并将测试执行结果打印到控制台。

*junit-platform-console-standalone-<version>.jar*包含所有依赖项的可执行文件发布在junit-platform-console-standalone目录下的中央 Maven 存储库中。您可以运行独立的 ConsoleLauncher,如下所示。

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

For details about the options consult https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcherplease.

有关选项的详细信息,请参阅https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher

Tailored to your example and using JUnit Platform version 1.3.1, the commands could look like those:

根据您的示例定制并使用 JUnit Platform version 1.3.1,命令可能如下所示:

$ 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
...