junit5 - JUnit5 控制台启动器未找到测试
问题描述
我已经看过很多关于此的帖子,但似乎没有一个解决方案对我有用。
问题是 JUnit5 控制台启动器似乎找不到我的测试,无论我尝试什么语法。我尝试使用 --scan-classpath 扫描它们并直接使用 -c 指定类,包括生成 NoClassDefFound 的包说明符。
使用 --scan-classpath 控制台启动器成功运行,但不包括任何单元测试执行 - 由于某种原因找不到测试类。
树看起来像这样:
junit-5-jars (the console standalone jar is in here)
src
mypackage
MyClass.java
MyClass.class
test
mypackage
MyClassShould.java
MyClassShould.class
从根本上说,我尝试的第一个也是最基本的命令:
java -jar junit5-jars/junit-platform-console-standalone-1.7.0-all.jar --class-path=test --class-path=src --scan-classpath
我尝试过的所有变体都给了我:
Test run finished after 27 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 ]
这是在 bash 的 Mac 上。在我运行命令的根目录中包含所有类文件的项目中,我可以使用控制台启动器成功运行测试。但是如果类文件在这样的子目录中,那就不行了。有人有想法吗?(注意 - 请参阅下面的答案,子目录不是问题 - 测试类名称中的“应该”是)。
解决方案
我想我已经发现了这个问题的根源——它是测试类名称中的“应该”,JUnit5 ConsoleLauncher 不包括默认扫描。
这有效:
java -jar junit5-jars/junit-platform-console-standalone-1.7.0-all.jar --class-path=test:src --include-classname=.* --scan-classpath
include classname 选项采用正则表达式,但在我的情况下,我只是让它扫描类路径上的所有文件以进行测试,然后它会按应有的方式找到它们。
如果他们的文档中的 --scan-classpath 描述引用了 include-classname 选项和/或他们的默认扫描包含,将会很有帮助。很容易在选项墙中错过那个论点。
推荐阅读
- spring - Docker 上的 Spring 属性误读
- c - curl 使用自定义函数附加 slist
- javascript - jQuery .hide() & .show()
- javascript - Javascript如何获取当前时间的最近小时并添加额外的小时
- php - PHP 中未定义的 PHP 变量:变量 $_GET_GET。尝试访问 null 类型值的数组偏移量
- angular - 错误 TS2351:此表达式不可构造。类型 'typeof import("jspdf")' 没有构造签名
- mysql - 在 MySQL 关系表中获取给定子节点的所有父节点(及其父节点)
- sql - ssrs 中的数值(精度,小数)等价物
- javascript - 应用 Js 显示或隐藏元素
- aws-lambda - FIFO Sqs 和 AWS Lambda 中的奇怪行为