JUnit5+Selenium项目:如何用@IncludeTags匹配双标签测试
问题:JUnit5测试套件如何只运行同时具备两个标签的测试用例
我有一个基于Java、使用JUnit5的Selenium项目,包含若干测试套件和带标签的测试用例。我希望创建一个测试套件,仅运行同时具备两个指定标签的测试用例。
现有套件示例:
@SelectClasses(ScreenshotComparisonTests.class) @IncludeTags({"CC"}) @ExcludeTags({"CASH", "FINANCIAL", "HACCP", "HRM", "INVENTORY", "OPERATIONS", "PURCHASING", "REPORTING"}) @Suite @SuiteDisplayName("C User Menu Screenshots Comparison Tests") public class CUserMenuScreenshotComparisonSuite { }
我不想逐一列出需要排除的标签,尝试用标签表达式的写法,但IntelliJ提示语法错误:
@SelectClasses(ScreenshotComparisonTests.class) @IncludeTags({"CC" & "USERMENU"}) @Suite @SuiteDisplayName("C User Menu Screenshots Comparison Tests") public class CUserMenuScreenshotComparisonSuite { }
尝试过以下几种写法,均出现编译错误:
@IncludeTags("CC" & "USERMENU")@IncludeTags{(("CC" & "USERMENU"))}@IncludeTags{"CC" & "USERMENU"}@IncludeTags{(("CC" && "USERMENU"))}
编译错误信息:
java: bad operand types for binary operator '&' first type: java.lang.String second type: java.lang.String
解决方案
你混淆了Java语法与JUnit5的标签表达式语法。JUnit5的标签表达式是作为单个字符串传入的,不需要用Java的&/&&运算符拼接字符串,而是直接在字符串内部使用标签表达式的逻辑运算符。
正确的实现方式是将两个标签的逻辑与表达式放在同一个字符串中,使用&&(官方推荐)或&:
@SelectClasses(ScreenshotComparisonTests.class) @IncludeTags("CC && USERMENU") @Suite @SuiteDisplayName("C User Menu Screenshots Comparison Tests") public class CUserMenuScreenshotComparisonSuite { }
如果习惯数组形式,也可以写成:
@IncludeTags({"CC && USERMENU"})
JUnit5标签表达式核心规则:
&&:逻辑与,要求测试用例同时具备所有指定标签||:逻辑或,要求测试用例具备任意一个指定标签!:逻辑非,排除具备指定标签的测试用例- 支持括号分组,例如
(CC || ADMIN) && USERMENU
内容的提问来源于stack exchange,提问作者Hazel Egan
相关产品推荐
相关产品推荐

