如何使 Maven Surefire 插件包含正则表达式不匹配特定前缀?
How to Make Maven Surefire Plugin Include Regex not Match a Specific Prefix?
我试图让 maven-surefire-plugin 仅 运行 所有满足以下条件的测试:
- 匹配模式
*Test.java
,但不匹配 *SomeTest.java
;
- 或匹配模式
*AnotherSomeTest.java
.
有什么办法可以实现吗?
我已经尝试过包含字符串:
**/*Test.java, !%regex[.*(?!Another)SomeTest.*]
但是这不起作用。
使用 a regular expression 有多种可能的解决方案。最简单的是配置
<includes>
<include>*AnotherSomeTest.java</include>
<include>%regex[.*(?<!Some)Test\.class]</include>
</includes>
这将匹配 class 名称以 AnotherSomeTest
或 Test
but not preceded by Some
结尾的测试(负面回顾 <
只需要用 <
正确转义)。请注意,正则表达式匹配是在 .class
文件上完成的,而传统的匹配是在 .java
文件上完成的。
您可以将其放入一个正则表达式中,
<include>%regex[.*(?<!(?<!Another)Some)Test\.class]</include>
选择所有以 Test
结尾的测试,前面没有 Some
,它们本身也没有 Another
,尽管它可能不是更清楚。
另一种选择是使用 multiple formats into one,自插件和 JUnit 4 或 TestNG 版本 2.19 起有效。这对命令行特别有用:
<include>%regex[.*(?<!Some)Test\.class], *AnotherSomeTest.java</include>
我试图让 maven-surefire-plugin 仅 运行 所有满足以下条件的测试:
- 匹配模式
*Test.java
,但不匹配*SomeTest.java
; - 或匹配模式
*AnotherSomeTest.java
.
有什么办法可以实现吗?
我已经尝试过包含字符串:
**/*Test.java, !%regex[.*(?!Another)SomeTest.*]
但是这不起作用。
使用 a regular expression 有多种可能的解决方案。最简单的是配置
<includes>
<include>*AnotherSomeTest.java</include>
<include>%regex[.*(?<!Some)Test\.class]</include>
</includes>
这将匹配 class 名称以 AnotherSomeTest
或 Test
but not preceded by Some
结尾的测试(负面回顾 <
只需要用 <
正确转义)。请注意,正则表达式匹配是在 .class
文件上完成的,而传统的匹配是在 .java
文件上完成的。
您可以将其放入一个正则表达式中,
<include>%regex[.*(?<!(?<!Another)Some)Test\.class]</include>
选择所有以 Test
结尾的测试,前面没有 Some
,它们本身也没有 Another
,尽管它可能不是更清楚。
另一种选择是使用 multiple formats into one,自插件和 JUnit 4 或 TestNG 版本 2.19 起有效。这对命令行特别有用:
<include>%regex[.*(?<!Some)Test\.class], *AnotherSomeTest.java</include>