1

我正在尝试使用以下命令。我有

  • Mytest1_test.java,
  • Mytest2_test.java,
  • Mytest3_test.java,
  • Mytest4_test.java,
  • Mytest5_test.java,

我想一次运行前 4 个。

mvn test -Dtest=Mytest[1-4]_test

但它没有给我任何测试。

有人可以建议...吗?

4

4 回答 4

2

利用:

mvn -Dtest=Mytest*_test test
于 2012-07-25T19:43:48.467 回答
1

诀窍是使用 * 字符并使用 ! 排除其他测试 字符如下。

mvn test -Dtest=Mytest*_test,!Mytest5_test

根据 Maven surefire 插件的官方文档,下面的命令应该使用正则表达式,但它似乎不起作用(没有执行测试)。

mvn test -Dtest=%regex[Mytest[1-4]_test] 

使用 Maven Surefire 插件 3.x 在 Windows 7 上测试。

于 2021-02-18T11:10:21.280 回答
0

如果您在目录中有测试,则可以通过编写正则表达式从其中一个启动所有测试,例如。对于 qa/src/test/java/com/frax/doc/ 中的子目录“/doc”中的所有测试:

mvn -Dtest=*/doc/* test
于 2018-02-13T14:58:04.557 回答
0

为了匹配正则表达式,您可能需要添加包名称 - 只需前缀 with.*可能就足够了(您可以尝试使用和不使用.*后缀 - 我用它来匹配 JUnit4 下的“.class”):

mvn test "-Dtest=%regex[.*Mytest[1-4]_test.*]"

请注意,当我们添加更多测试组合时,我在整个-Dtest参数周围使用了引号以使其更具可读性。

添加有问题的测试

当我们有一个仅在某些组合中失败的有问题的测试时,我们可以在引号 ( ") 内但在].

假设Mytest5_test测试 1、2 和 3 失败。我们可以对前 3 个使用正则表达式,然后是逗号和标准匹配Mytest5_test,如果我们需要捕获任何包,则使用 *:

mvn test "-Dtest=%regex[.*Mytest[1-3]_test.*], *Mytest5_test"

严格来说,我们不需要引号,但如果没有引号,我们需要删除不同测试之间的空格,这会降低命令的可读性。

查找有冲突的测试

当我们的测试在与其他人组合运行时失败(静态模拟通常是罪魁祸首),我们也可以使用正则表达式来帮助找到冲突的测试。

要在以 my.co.[am] 开头的包中运行所有测试,Mytest5_test我们可以使用:

mvn test "-Dtest=%regex[.*my.co.[a-m].*], *Mytest5_test"

如果我没记错的话,JUnit 4 需要斜杠分隔符,JUnit 5 需要点分隔符,而 Spock 只是有没有包的类名。使用.*和上面正则表达式中的通配符单个字符.将起作用,无论测试名称是否包含斜杠或点作为包名称。

然后更改正则表达式以运行其他测试(例如 [nz])并继续缩小范围,直到获得所需的组合。

于 2022-01-10T08:25:22.443 回答