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

时间:2018-07-19 04:21:24

标签: selenium-webdriver dependency-injection cucumber cucumber-jvm picocontainer

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

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

我的问题:请考虑我上面所说的话,在此处,在黄瓜jvm中将依赖注入与picocontainer一起使用是否会导致不良习惯?如果是,是否还有更好的解决方案?

(可选背景)我认为这并不重要,但是我将包含它,每个步骤中的钩子方法几乎占95%:

@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);
    }
}

1 个答案:

答案 0 :(得分:1)

依赖注入解决了场景中多个步骤定义文件之间共享状态的问题。将步骤注入其他步骤可能被认为是不好的做法,但总体而言,DI本身并非如此。但这似乎都不是您的直接问题。

您的问题似乎是您有多个执行相同操作的钩子。您可以删除这些重复的钩子,也可以使用非常严格的方法来选择要使用的功能和粘合(请检查运行程序或命令行参数上的CucumberOptions)。如果缩小到一个类,它将只使用该类中的步骤和钩子。

或者,您也可以删除重复的钩子。