当前位置: 首页 > 知识库问答 >
问题:

依赖注入在cucumber中是如何工作的?

路扬
2023-03-14

我一直在尝试将< code>webdriver注入到步骤中。我已经使用了这个说明,效果很好。

想法是将WebDriver作为服务注入到steps类中。在初始步骤,您需要添加以下依赖项。

<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-spring</artifactId>
    <version>1.2.5</version>
    <scope>test</scope>
</dependency>

依赖关系注入涉及三个主要类。在这里,我们逐一介绍它们。

BaseUtil

BaseUtil是具有WebDriverof Selenium属性的类。这个类非常简单:

public class BaseUtil {

 private WebDriver driver;

 public WebDriver getDriver() {return driver;}

 public void setDriver(WebDriver driver) { this.driver = driver;}
}

钩子类包含之前和之后的。方法testInitialier()负责加载webDriver文件并创建实例,而方法testTearDown()负责关闭浏览器。

    public class Hook extends BaseUtil{

    BaseUtil base;


    @Before
    public void testInitializer(){
        File file = new 
            File(IgniteTaskApplication.class.getClassLoader().getResource("driver/chromedriver.exe").getFile());
        String driverPath=file.getAbsolutePath();
        System.out.println("Webdriver is in path: "+driverPath);
        System.setProperty("webdriver.chrome.driver",driverPath);
        base.setDriver(new ChromeDriver());
    }

    public Hook(BaseUtil base) {
        this.base = base;
    }

    @After
    public void tearDownTest(){
        base.getDriver().close();
    }
}

步骤

steps类包含来自已编译特征文件的步骤。要在Eclipse中编译功能文件,需要在Eclipse中安装Eclipse Cucumber插件。

public class ClickButton_Steps extends BaseUtil{
    BaseUtil base;

    public ClickButton_Steps(BaseUtil base){
        super();
        this.base=base;
    }

    @When("^I clcik on the button$")
    public void i_clcik_on_the_button() throws Throwable {
        cb=new ClickButtonPage(base.getDriver());
        cb.navigator();
    }

        // The other steps ...
}

我怎么运行它?

打开功能文件-

问题

我想知道以导致依赖注入的方式运行方法的顺序是什么?

我猜顺序如下:

  1. Junit调用@在方法之前,该方法是testLaunalizer()
  2. testLaunalizer()在Hook类中,因此它需要制作Hook类的一个实例。
  3. 它导致调用Hook类的构造器。

但是,我无法理解其余的步骤。也许甚至它根本不是真的。我的意思是,我有一个功能代码,但我无法解释它是如何工作的?


共有1个答案

晏正豪
2023-03-14

正如我正确理解的那样,您使用JUnit作为cucumberSpring的测试框架。JUnit提供以下生命周期。

当你用annotation @Before来注释这个方法时,它会在你每次测试之前调用这个方法。至于@After可以用来清理资源,并在每次测试后调用。

运行测试时的测试流程:

  • 测试初始化器
  • 点击按钮
  • 撕裂试验

此外,您可以使用日志记录(slf4j)而不是System.out.println,这样跟踪测试流就更容易了。

 类似资料:
  • 如何在类中注入依赖与@Inject注释micronaut框架 如何使用@Inject

  • 问题内容: 我是AngularJS的新手,我想了解更多有关默认注入的依赖项的信息。在阅读代码时,我注意到有时依赖项是事先明确声明的,有时则不是。例如: 给出与以下结果相同的结果: 这是如何运作的?Angular是否假设要注入的模块的名称与参数中的变量相同? 同样,奇怪的是,如果您确实指定将要注入的依赖项,则必须以 正确的顺序 指定 所有 依赖项,否则将无法正常工作。例如,这是损坏的代码: 有人可以

  • 泽西正常使用HK2依赖注入,但我想用匕首2的泽西。Dagger和HK2都实现了JSR330,我认为这是不需要太多努力就可以实现的。我找到了让Jersey与CDI(例如Weld)、Spring DI和Guice一起工作的方法,但在Dagger上我找不到任何东西。 为了提供一些上下文:我正在SE环境中运行Grizzly-Jersey服务器,而不是在EE容器中。我的Maven项目有和作为依赖项,但没有,

  • 问题内容: 已经发布了几个问题,其中包括有关依赖项注入的特定问题,例如何时使用它以及支持它的框架。然而, 什么是依赖项注入?何时/为什么/不应该使用它? 问题答案: 依赖注入 将依赖传递给其他 对象 或 框架 (依赖注入器)。 依赖注入使测试更加容易。注入可以通过 构造函数 完成。 其构造函数如下: 问题 :如果涉及复杂的任务,例如磁盘访问或网络访问,则 很难 对其进行单元测试。程序员必须进行模拟

  • 我想用di。在《颤栗》中,我加上这个https://pub.dartlang.org/packages/di打包我的项目,我开始读这篇文章https://webdev.dartlang.org/angular/guide/dependency-injection文章,但我不完全理解。 所以没关系:在服务类(例如:MyServices)上使用@Injectable()注释,但是如何注入其他类呢?例如

  • 本文向大家介绍webapi中如何使用依赖注入,包括了webapi中如何使用依赖注入的使用技巧和注意事项,需要的朋友参考一下 本篇将要和大家分享的是webapi中如何使用依赖注入,依赖注入这个东西在接口中常用,实际工作中也用的比较频繁,因此这里分享两种在api中依赖注入的方式Ninject和Unity;由于快过年这段时间打算了解下vue.js,所以后面对webapi的分享文章可能会慢点更新,希望支持