咨询:通过定位features目录获取项目名的方案是否可行
方案可行性分析及优化实现
你的方案完全可行,而且比原有逻辑更健壮,能适配更多层级的目录结构。
原代码的局限性
原来的代码通过取路径分割后的最后一个元素获取项目名称,仅在.feature文件直接位于项目根目录下时有效。一旦文件嵌套在features目录下的多层子文件夹中,就会错误地返回.feature文件名而非项目名称。
你的方案优势
基于features目录定位的逻辑,只要项目结构遵循项目代码放在features目录的直接子目录下的规则,就能稳定获取到项目名称,不受后续子文件夹层级的影响。
优化后的代码实现
private String getProjectName(Scenario scenario) { String[] pathSegments = Path.of(scenario.getUri()).toUri().getPath().split("/"); // 过滤空字符串,避免路径开头/导致的空元素干扰 List<String> validSegments = Arrays.stream(pathSegments) .filter(segment -> !segment.isEmpty()) .toList(); for (int i = 0; i < validSegments.size(); i++) { if ("features".equals(validSegments.get(i))) { if (i + 1 < validSegments.size()) { return validSegments.get(i + 1); } throw new IllegalArgumentException("路径无效:'features'目录下未找到项目文件夹"); } } throw new IllegalArgumentException("路径无效:未找到'features'目录"); }
注意事项
- 增加了空元素过滤,避免路径开头的
/导致分割后出现空字符串,影响索引定位 - 添加了异常处理,在找不到
features目录或features后无后续目录时抛出明确异常,便于排查问题
内容的提问来源于stack exchange,提问作者Kermi
相关产品推荐
相关产品推荐

