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
How to launch JUnit 5 (Platform) from the command line (without Maven/Gradle)?
提问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
ConsoleLauncher
is 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 Vintage和JUnit 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
...