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

使用 JUnit 5 控制台启动器运行 JAR 中包含的 JUnit 5 测试

郁和通
2023-03-14

我有一个名为< code > smoke-tests-fat-1 . 0 . 0-snapshot . JAR 的fat JAR,包含JUnit 5测试。测试在方法级别用< code > org . JUnit . Jupiter . API . test 进行注释。

现在我想用JUnit5控制台启动器执行这些测试。然而,我似乎没能把它弄对。

我试过:

  • <code>java-jar junit平台控制台是独立的。jar——smoke-tests-fat-1.0.0-SNAPSHOT的类路径。jar——扫描类路径
  • <code>java-jar junit平台控制台是独立的。jar——smoke-tests-fat-1.0.0-SNAPSHOT的类路径。jar——选择package=my.package

但这两个命令都不起作用。控制台启动器永远不会找到任何测试。

如何让控制台启动器执行JAR中包含的JUnit 5测试?

共有2个答案

袁运锋
2023-03-14

像这样的

        LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
            .selectors(
                    selectPackage("com.bla.blapackage")          
            )
            .filters(
                    includeClassNamePatterns(ClassNameFilter.STANDARD_INCLUDE_PATTERN)
            )
            .build();

或者对于spring-boot fat jar,实际上并不是fat jar,需要选择每个类。

            LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
            .selectors(
                   
                    selectClass(ValidationTest.class)
            )

            .build();
邢冷勋
2023-03-14

根据这个测试答案https://stackoverflow.com/a/52373592/1431016它应该按照你尝试的方式工作。

  • 您的测试类的命名是否与默认的测试类名模式要求相同?一、 e.以<code>TestTest[s]结束
  • fat JAR文件的内容是否正确打包?一、 e.匹配目录树和包名结构

如果您的测试类遵循不同的命名模式,您可以通过-n,--embde-class name=PATTERN选项将您的模式传递给控制台启动器,而不是重命名它们:

--include-classname=PATTERN
                             Provide a regular expression to include only classes whose
                               fully qualified names match. To avoid loading classes
                               unnecessarily, the default pattern only includes class
                               names that begin with "Test" or end with "Test" or
                               "Tests". When this option is repeated, all patterns will
                               be combined using OR semantics. Default: [^(Test.*|.+[.$]
                               Test.*|.*Tests?)$]
 类似资料:
  • 我正在为我的Spring启动应用程序执行单元测试。测试工作正常,并在从intellij运行时给出预期的输出。我正在尝试使用Junit5控制台启动器从终端运行相同的测试。这是我使用的命令:- 我从包含测试类的< code > out/tests/package 文件夹中运行上面的命令。 我可以在我的外部jars文件夹中看到所需的jar和依赖项。但是当我从终端运行它时,我得到了下面的错误。 整个堆栈跟

  • 我试图用JUnit5控制台启动器运行一个简单的测试。我试了几个选择,但都不起作用。谁能告诉我哪里出了问题吗? .+--JUnit Jupiter[OK] '--JUnit Vintage[OK] 测试运行在11毫秒后完成[2个容器] [0个容器跳过][2个容器启动] [0个容器中止][2个容器成功] [0个容器失败][0个测试找到] [0个测试跳过][0个测试启动] [0个测试中止][0个测试成功

  • 问题内容: 我正在尝试使用JUnit5控制台启动器运行一个简单的测试。我尝试了几种选择,但是没有用。有人可以告诉我哪里出了问题吗? 给我警告 我试图在目录中运行所有测试,但这似乎找不到测试: 结果是这样的: 。+-JUnit Jupiter [确定] ‘-JUnit Vintage [确定] 11毫秒后测试运行完成[找到2个容器] [跳过0个容器] [0个容器中止] [2个容器成功] [0个容器失

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

  • 我有一个Spring Boot应用程序,想为控制器编写集成测试。它是我的: 它是我的控制器: 我创建了一个测试(JUnit5): 哪种方法更好?

  • 我遇到了无法使用Maven运行JUnit5测试的问题。在IDE中运行它们工作正常,但使用“mvn测试”会产生以下输出: 这是我的测试课程: pom: 我做了一些研究,我认为这可能与混合JUnit4和JUnit5特性有关,这导致maven surefire插件无法运行测试。然而,我找不到那些剩余的JUnit4特性可能在哪里。我将感谢任何帮助。