首页 > 解决方案 > 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

解决方案


我想我已经发现了这个问题的根源——它是测试类名称中的“应该”,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 选项和/或他们的默认扫描包含,将会很有帮助。很容易在选项墙中错过那个论点。


推荐阅读