我正在尝试使用以下命令。我有
- Mytest1_test.java,
- Mytest2_test.java,
- Mytest3_test.java,
- Mytest4_test.java,
- Mytest5_test.java,
我想一次运行前 4 个。
mvn test -Dtest=Mytest[1-4]_test
但它没有给我任何测试。
有人可以建议...吗?
利用:
mvn -Dtest=Mytest*_test test
诀窍是使用 * 字符并使用 ! 排除其他测试 字符如下。
mvn test -Dtest=Mytest*_test,!Mytest5_test
根据 Maven surefire 插件的官方文档,下面的命令应该使用正则表达式,但它似乎不起作用(没有执行测试)。
mvn test -Dtest=%regex[Mytest[1-4]_test]
使用 Maven Surefire 插件 3.x 在 Windows 7 上测试。
如果您在目录中有测试,则可以通过编写正则表达式从其中一个启动所有测试,例如。对于 qa/src/test/java/com/frax/doc/ 中的子目录“/doc”中的所有测试:
mvn -Dtest=*/doc/* test
为了匹配正则表达式,您可能需要添加包名称 - 只需前缀 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])并继续缩小范围,直到获得所需的组合。