当前位置: 首页 > 知识库问答 >
问题:

如何从命令行启动JUnit 5(平台)(不用Maven/Gradle)?

况野
2023-03-14

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

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

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

JUnit 5是否有等价物?我只是想知道测试是否成功,就像它在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());
    }
}

共有1个答案

公孙栋
2023-03-14

当然,请使用控制台启动器

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

可执行文件< code > * JUnit-platform-console-standalone-

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

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

根据您的示例,使用JUnit平台版本<code>1.3.1</code>,命令可能如下所示:

$ 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
...
 类似资料:
  • 我编译了测试,并尝试执行以下操作来运行它们: 这引发了一个巨大的异常,开始是这样的: 但基本上说它找不到JUnitExc的类。如果我让控制台启动器查找测试,它找不到任何测试: 我不知道如何在没有IDE的情况下从命令行运行JUnit5测试。 更新: 使用 Maven 运行测试(使用 Surefire 插件)会给我同样的错误。我什至删除了所有测试,但仅导入 junit5 依赖项的测试除外,但我仍然收到

  • 我希望将测试分发到junit5独立控制台的多个实例,每个实例从队列中读取数据。runner的每个实例将使用相同的测试。jar在类路径上,所以我不想在这里分发实际测试的字节码,只想分发测试/过滤器模式字符串的名称。 在JUnit5高级主题文档中,我认为扩展JUnit5的合适地方是使用平台启动器api。我将这段代码大致与指南中的示例代码拼凑在一起。我认为这是我需要写的,但我担心我过于简化了这里所涉及的

  • 我一直在尝试在Windows中创建一个批处理文件,以直接启动Minecraft 1.7.10。然而,自从新的启动器发布以来,我尝试的方法已经改变了。有人知道我如何使用用户名和会话令牌从命令行直接启动它吗?我合法拥有Minecraft,所以我应该能够使用我的会话令牌和用户名。

  • 我想为Apache James运行构建版本,它有一个巨大的测试套件,由于与我无关的测试,例如关于RabbyMQ的测试,它正在运行很长时间。因此,我想排除这些,我想从命令行(而不是通过编辑POM)执行此操作。我在 Java 11 开放JDK 上使用 Maven 3.6.3。该项目使用 JUnit5 和专家-sure-fire 插件 2.22.2。 现在,我期望下面的工作: 例如,只运行org.exa

  • 我正在为我的Spring启动应用程序执行单元测试。测试工作正常,并在从intellij运行时给出预期的输出。我正在尝试使用Junit5控制台启动器从终端运行相同的测试。这是我使用的命令:- 我从包含测试类的< code > out/tests/package 文件夹中运行上面的命令。 我可以在我的外部jars文件夹中看到所需的jar和依赖项。但是当我从终端运行它时,我得到了下面的错误。 整个堆栈跟

  • 我有一个包含以下文件的Java项目: C:\MyProject\myPackage\MyTests.class C:\MyProject\lib\junit-platform-console-standalone-1.5.2.jar C:\MyProject\lib\other-library.jar MyTests 文件是使用 IDE 编译的,该 IDE 具有 junit-platform-co