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

无法使用junit5控制台启动器从终端运行Junit5测试

吴才俊
2023-03-14

我正在为我的Spring启动应用程序执行单元测试。测试工作正常,并在从intellij运行时给出预期的输出。我正在尝试使用Junit5控制台启动器从终端运行相同的测试。这是我使用的命令:-

java -jar junit-platform-console-standalone-1.6.0-RC1.jar --class-path . -c AdapterTest

我从包含测试类的< code > out/tests/package 文件夹中运行上面的命令。

我可以在我的外部jars文件夹中看到所需的jar和依赖项。但是当我从终端运行它时,我得到了下面的错误。

整个堆栈跟踪 :-

java -jar junit-platform-console-standalone-1.6.0-RC1.jar --class-path . -c AdapterTest
Thanks for using JUnit! Support its development at https://junit.org/sponsoring
org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests
        at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:189)
        at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:168)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
        at org.junit.platform.console.tasks.ConsoleTestExecutor.executeTests(ConsoleTestExecutor.java:66)
        at org.junit.platform.console.tasks.ConsoleTestExecutor.lambda$execute$0(ConsoleTestExecutor.java:58)
        at org.junit.platform.console.tasks.CustomContextClassLoaderExecutor.replaceThreadContextClassLoaderAndInvoke(CustomContextClassLoaderExecutor.java:41)
        at org.junit.platform.console.tasks.CustomContextClassLoaderExecutor.invoke(CustomContextClassLoaderExecutor.java:31)
        at org.junit.platform.console.tasks.ConsoleTestExecutor.execute(ConsoleTestExecutor.java:58)
        at org.junit.platform.console.ConsoleLauncher.executeTests(ConsoleLauncher.java:95)
        at org.junit.platform.console.ConsoleLauncher.execute(ConsoleLauncher.java:73)
        at org.junit.platform.console.ConsoleLauncher.execute(ConsoleLauncher.java:50)
        at org.junit.platform.console.ConsoleLauncher.execute(ConsoleLauncher.java:43)
        at org.junit.platform.console.ConsoleLauncher.main(ConsoleLauncher.java:37)
Caused by: org.junit.platform.commons.JUnitException: ClassSelector [className = 'AdapterTest'] resolution failed
        at org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener.selectorProcessed(AbortOnFailureLauncherDiscoveryListener.java:39)
        at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:102)
        at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:82)
        at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:113)
        at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:45)
        at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:69)
        at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:181)
        ... 12 more
Caused by: org.junit.platform.commons.PreconditionViolationException: Could not load class with name: AdapterTest
        at org.junit.platform.engine.discovery.ClassSelector.lambda$getJavaClass$0(ClassSelector.java:75)
        at org.junit.platform.commons.function.Try$Failure.getOrThrow(Try.java:335)
        at org.junit.platform.engine.discovery.ClassSelector.getJavaClass(ClassSelector.java:74)
        at org.junit.jupiter.engine.discovery.ClassSelectorResolver.resolve(ClassSelectorResolver.java:66)
        at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.lambda$resolve$2(EngineDiscoveryRequestResolution.java:134)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1359)
        at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
        at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
        at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:531)
        at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:185)
        at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:125)
        at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:91)
        ... 17 more
Caused by: java.lang.ClassNotFoundException: AdapterTest
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:817)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at org.junit.platform.commons.util.ReflectionUtils.lambda$tryToLoadClass$9(ReflectionUtils.java:790)
        at org.junit.platform.commons.function.Try.lambda$call$0(Try.java:57)
        at org.junit.platform.commons.function.Try.of(Try.java:93)
        at org.junit.platform.commons.function.Try.call(Try.java:57)
        at org.junit.platform.commons.util.ReflectionUtils.tryToLoadClass(ReflectionUtils.java:753)
        at org.junit.platform.commons.util.ReflectionUtils.tryToLoadClass(ReflectionUtils.java:709)
        ... 32 more

我不确定为什么我得到这个错误。尝试了这里提到的所有内容:-https://stackoverflow.com/questions/45869932/unable-to-run-tests-with-junit5-console-launcher但我仍然得到上面提到的错误。如何从终端运行测试?

更新 :- 尝试从 out/tests 运行命令 :- 获取以下输出 :-

Thanks for using JUnit! Support its development at https://junit.org/sponsoring
╷
├─ JUnit Jupiter ✔
└─ JUnit Vintage ✔
Test run finished after 24 ms
[         2 containers found      ]
[         0 containers skipped    ]
[         2 containers started    ]
[         0 containers aborted    ]
[         2 containers successful ]
[         0 containers failed     ]
[         0 tests found           ]
[         0 tests skipped         ]
[         0 tests started         ]
[         0 tests aborted         ]
[         0 tests successful      ]
[         0 tests failed          ]

测试仍未运行。

共有1个答案

仰翰采
2023-03-14

这是适合我从项目的根文件夹中运行它的命令:

java-jar junit-platform-console-standalone-1.5.2.jar-classpath./bin--扫描classpath

<代码>。/bin是包含我编译的类的目标文件夹。

我使用这个命令从终端编译我的测试:

javac-cp./src/:junit-jupiter-api-5.6.0-20200102.170103-207.jar'-d./bin./src/Assignment1Test.java

./src/Assignment1Test.java 是我的测试类。

所以,我从这个文件夹结构开始:

project
 |
 |-- junit-jupiter-api-5.6.0-20200102.170103-207.jar
 |-- junit-platform-console-standalone-1.5.2.jar
 |--bin
 |--src
     \ Assignment1.java
     \ Assignment1Test.java

我以这个结尾:


project
 |
 |-- junit-jupiter-api-5.6.0-20200102.170103-207.jar
 |-- junit-platform-console-standalone-1.5.2.jar
 |--bin
     \ Assignment1.class
     \ Assignment1Test.class
 |--src
     \ Assignment1.java
     \ Assignment1Test.java

然后我运行我的测试

 类似资料:
  • 我试图用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 依赖项的测试除外,但我仍然收到

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

  • 问题内容: Maven执行 我正在尝试使用我的一个Maven项目,但在此阶段无法使用- 我得到的输出是- 尝试实施上述解决方案@ Surefire没有采用Junit5测试来将依赖关系更新为- 并将插件更新为- 但输出保持不变。 问题 -这是自定义提供没有更多的支持,或者是有什么解决方案使用执行测试,和/或 现在? 注意 -测试执行在JUnit-4上运行良好。 问题答案: 您应该像这样配置maven

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