如何在缺失任一必填系统属性时禁用测试?反之如何启用?
解决JUnit 5测试类根据系统属性启用/禁用的问题
问题原因
你当前的代码未生效的核心原因是:@DisabledIfSystemProperty 仅当系统属性存在且匹配正则表达式时才会禁用测试。如果某个必填属性完全未设置(即systemProperties中不存在该键),对应的注解不会触发,导致测试类依然会被执行,不符合“任一必填属性缺失则禁用”的需求。此外,你的正则表达式^\\s+$仅匹配包含至少一个空白字符的字符串,无法匹配空字符串("")的情况。
解决方案
方案1:使用@DisabledIf实现“任一属性缺失/空白则禁用”
通过SpEL表达式直接检查所有三个属性是否存在且非空白,只要有一个不满足就禁用测试类:
// 任一必填属性缺失或空白时禁用测试类 @DisabledIf("#{systemProperties['some'] == null || systemProperties['some'].trim().isEmpty() || " + "systemProperties['other'] == null || systemProperties['other'].trim().isEmpty() || " + "systemProperties['another'] == null || systemProperties['another'].trim().isEmpty()}") class MyTest { // 测试方法 }
方案2:使用@EnabledIf实现“所有属性都存在且非空白才启用”
这种方式更直观,直接定义测试类启用的条件:
// 所有必填属性都存在且非空白时才启用测试类 @EnabledIf("#{systemProperties['some'] != null && !systemProperties['some'].trim().isEmpty() && " + "systemProperties['other'] != null && !systemProperties['other'].trim().isEmpty() && " + "systemProperties['another'] != null && !systemProperties['another'].trim().isEmpty()}") class MyTest { // 测试方法 }
说明
systemProperties是JUnit 5 SpEL表达式中预定义的变量,可直接访问系统属性。trim().isEmpty()同时覆盖了空字符串和仅含空白字符的情况。- 两种方案实现的效果完全一致,可根据个人阅读习惯选择。
内容的提问来源于stack exchange,提问作者Jin Kwon
相关产品推荐
相关产品推荐

