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

从命令行包含/排除Maven Surefire JUnit5的测试

和柏
2023-03-14

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

现在,我期望下面的工作:

例如,只运行org.example中的测试方法。MyTest是可以在mvn-Dtest=org.example中执行的测试类。来自命令行的MyTest测试。

但它不起作用。事实上,一旦我将test参数设置为空字符串以外的任何内容,所有测试都将被跳过。我尝试了一些据说支持的语法...

mvn package -Dtest=*
mvn package -Dtest=".*"
mvn package -Dtest=\!SomethingFishy
mvn package -Dtest='!MavenHeadache'
mvn package -Dtest='!%regex[.*HelpMe.*]'

...但结果总是一样的:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test
  (default-test) on project testing-base: No tests were executed!  
  (Set -DfailIfNoTests=false to ignore this error.) -> [Help 1]

我正在运行< code>package目标,因为它执行完整的构建,但是< code>test的行为是相同的。还尝试指定< code>-Dincludes=... / -Dexcludes=...,这没有任何影响:所有的测试都会被执行,参数甚至不会出现在< code>mvn -X的输出中...。当将maven-surefire-plugin更新到最新版本3.0.0-M5时,这种行为不会改变。

我理解错了吗?如何在此设置中指定包含/排除?

更新:看起来这是由嵌套项目和/或James的项目结构引起的。如果我输入“叶项目”,例如core,则包含/排除开始工作:

cd core
mvn test -Dtest=HostTest         # will only run HostTest, as expected
mvn test -Dtest=\!HostTest       # will run all tests but HostTest, as expected

正如RobertScote所建议的,我已经查看了maven-surefire插件配置,但找不到任何似乎与此行为相关的东西。

共有1个答案

庾远航
2023-03-14

错误消息告诉您需要知道的:在第一个运行的项目testing-base中,没有与您的模式匹配的测试,因此它无法确保您不会对成功有错误的印象。

然后它建议使用-DailIfNoTest=false选项让maven忽略没有任何与模式匹配的测试的模块(这可能是您需要的)。

 类似资料:
  • 我在这个文件中所做的是从一个java文件中执行一个hello.class文件,并使用正确的文件名将其输出作为txt文件存储在以下位置< code>C:\outtest\。但是当我编译上面的文件时,我的程序进入了某种无限循环,永远不会终止。 编辑 : 您好.java

  • 问题内容: 以下工作并打印命令输出: 但是此操作失败(退出状态为1): 有什么建议? 问题答案: 您可以这样做:

  • 在我的根项目中,我有两个子项目具有这种包结构。 在项目1中,我有一个用大规定义的类,就像这样 问题是,如果我运行该测试,它也会分析项目2中的所有内容。我如何排除包com.app.api?

  • 我有一个用gradle构建的大型代码库。我有几个JUnit测试,在构建时运行。 罐子 问题:我如何使用jar提供测试,并允许它们像运行jar一样从命令行运行? 我在SO上找不到任何关于使用gradle分发测试的信息,所有的命令行JUnit示例都不够,因为它们需要手动输入类路径,并且依赖项的数量很大(因此使用gradle Fatjar)。

  • 你可以用命令行选项-x来排除某些任务,让我们用上面的例子来示范一下. 例子 11.2. 排除任务 gradle dist -x test 命令的输出 > gradle dist -x test :compile compiling source :dist building the distribution BUILD SUCCESSFUL Total time: 1 secs 可以看到, tes

  • 问题内容: 我希望能够从命令行运行Junit测试,但是当我运行此命令时 我回来的就是 它是否与Android项目有关?我之前已经运行过该命令,并且没有太多问题。 问题答案: 我只是设法从命令行运行JUnit测试,但是使用adb shell。 命令是 更多细节在这里。