gpt4 book ai didi

java - 编译为 .war 时,Cucumber 在类路径上找不到功能文件

转载 作者:行者123 更新时间:2023-12-01 16:18:04 31 4
gpt4 key购买 nike

我正在尝试配置将在 JBoss 上部署的 .war 中运行的 Cucumber 测试。此设置使用 Controller 来启动 Cucumber Main。 Cucumber 需要粘合路径 (-g) 和功能文件路径的参数。通常,这些路径前面可能有 classpath:,并且 .feature 文件(和步骤定义)由 Cucumber 正确识别(无论是在本地运行,还是在编译的 .jar 文件中运行)。但是,当编译成.war文件时,会抛出以下异常:

java.nio.file.FileSystemNotFoundException: Provider "vfs" not installed

调试项目,Cucumber 正在寻找这里的功能:

vfs:/C:/Users/{user}/EAP-7.1.0/bin/content/war-test-1.0-SNAPSHOT.war/WEB-INF/classes/features/

除了未安装“vfs”之外,/bin/位置中没有/content 文件夹。当寻找资源位置中的文件应如何加载时,可以执行以下操作:

InputStream is = getClass().getClassLoader().getResourceAsStream("/features/Test.feature");

但是,当我传递 /features 作为功能位置时,Cucumber 会在 C:/features 中查找。我无权决定 Cucumber 如何加载其资源。是否有正确的方法来传递功能路径以便正确加载功能?

我准备了以下重现该问题的基本项目: https://github.com/bgagnon93/cucumber-war

我正在本地 Red Hat JBoss EAP 7.1 服务器上运行 cucumber-war.war。在服务器上启动运行后,将在本地主机上访问 web 应用程序: http://localhost:8080/cucumber-war-1.0-SNAPSHOT/

单击“开始”按钮将启动 Cucumber,并导致失败。

这是 PortalController 类中 Cucumber 启动的样子:

@PostMapping("/")
public String run() {
String[] cucumberArgs = {
"-g", "classpath:com/automation/steps",
"--tags", "@Test",
"classpath:features"
};
Main.run(cucumberArgs, Thread.currentThread().getContextClassLoader());
return "test";
}

是否有正确的方法来传递功能路径,以便正确加载功能?

最佳答案

您提供了正确的路径。

Cucumber 使用 JSR203 扫描功能文件。目前 Apache VFS 不支持 JSR203。不过,您可能会运气好 vfs2nio .

关于java - 编译为 .war 时,Cucumber 在类路径上找不到功能文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62353461/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com