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

10

我一直在尝试将webdriver注入到步骤中。我使用了这些指令,它能够正常运行。

思路是将WebDriver作为服务注入到步骤类中。在最初的步骤中,您需要添加以下依赖项。

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

涉及依赖注入的主要有三个类,我们将一一介绍。

enter image description here

BaseUtil

BaseUtil是一个包含了Selenium WebDriver属性的类。这个类非常简单:

public class BaseUtil {

 private WebDriver driver;

 public WebDriver getDriver() {return driver;}

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

钩子函数

Hook类包含@Before, @After。方法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-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 ...
}

怎么运行它?

打开特性文件 -> 运行为 -> 运行 Junit

问题

我想知道按照什么顺序运行方法可以实现依赖注入?

我猜想顺序如下:

  1. Junit 调用一个名为 testInitializer()@Before 方法。
  2. testInitializer() 在 Hook 类中,因此需要创建一个 Hook 类的实例。
  3. 这会导致调用 Hook 类的构造函数。

但是,我无法理解其余的步骤。也许这根本不正确。我的意思是,我的代码是可行的,但我无法解释它的工作原理?


返回结果:

怎么运行它?

打开特性文件 -> 运行为 -> 运行 Junit

问题

我想知道按照什么顺序运行方法可以实现依赖注入?

我猜想顺序如下:

  1. Junit 调用一个名为 testInitializer()@Before 方法。
  2. testInitializer() 在 Hook 类中,因此需要创建一个 Hook 类的实例。
  3. 这会导致调用 Hook 类的构造函数。

但是,我无法理解其余的步骤。也许这根本不正确。我的意思是,我的代码是可行的,但我无法解释它的工作原理?


说明书的链接已损坏。 - user637338
1个回答

1
我理解您的意思是,您在使用cucumber-spring作为测试框架,并结合JUnit。JUnit提供以下生命周期。
当您使用@Before注释方法时,它将在每个测试之前调用此方法。 至于@After,可用于清理资源并在每个测试之后调用。
运行测试时,您的测试流程如下:
- testInitializer - i_clcik_on_the_button - tearDownTest
另外,您可以使用日志记录(slf4j)而不是System.out.println,这样更容易跟踪测试流程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接