在 cucumber-jvm 中使用依赖注入是否考虑不好的做法?

Does using dependency injection in cucumber-jvm consider bad practise?

我对Cucumber-jvm/Selenium还是很陌生,所以如果这个问题听起来很愚蠢,我很抱歉。

背景:我是一家大公司的实习生。我正在为产品进行自动化软件测试。已经有一个现成的自动化测试步骤。我们要做的是扩展项目并添加我们自己的步骤。 问题是几乎所有的步骤都有相同的钩子方法。我之前问过一个关于如何避免 运行 钩子方法的问题,一个非常好的人说在钩子方法上使用标签。那是在我发现之前项目中几乎所有的钩子方法都有些相同之前。这让我觉得它不是很 fast/optimize 因为如果挂钩方法是全局的那么每次我 运行 一个功能文件时,它只会执行所有相同的挂钩方法。经过几天的编码和研究,我发现使用 picocontainer 进行依赖注入,我认为这是解决当前问题的好方法,但我读了一些文章,说依赖注入被认为是一种不好的做法。

我的问题: 考虑我上面所说的,在 cucumber-jvm 中使用 picocontainer 的依赖注入是否被认为是不好的做法?如果是,有更好的解决办法吗?

(可选背景)我认为这不重要,但我只是想包括它,每个步骤中几乎 95% 的 hook 方法:

@Before
public void keepScenario(Scenario scenario){
    this.scenario = scenario;
    fWait = new FluentWait<WebDriver>(BrowserDriver.getCurrentDriver());
    fWait.withTimeout(Duration.ofSeconds(10));
    fWait.ignoring(WebDriverException.class);
}

@After
public void screenshotOnFailure(){
    if (scenario.getStatus().equals("failed")) {
        BrowserDriver.getScreenshot(scenario);
    }
}

依赖注入解决了场景中多个步骤定义文件之间共享状态的问题。将步骤注入其他步骤可能被认为是一种不好的做法,但总的来说,DI 本身并不是。但是 none 这似乎是你的直接问题。

您的问题似乎是您有多个执行相同操作的挂钩。您可以删除这些重复的钩子或使用非常严格的方式来 select 您将使用哪些功能和胶水(检查运行器或命令行参数上的 CucumberOptions)。如果缩小到单个 class,它将只使用 class.

中的步骤和挂钩

或者您可以只删除重复的挂钩。