web-dev-qa-db-ja.com

依存性注入はCucumberでどのように機能しますか?

ステップにwebdriverを挿入しようとしています。私は この手順 を使用しましたが、うまく機能します。

アイデアは、WebDriverをサービスとしてステップクラスに挿入することです。最初のステップで、次の依存関係を追加する必要があります。

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

依存関係の注入に関係する3つの主要なクラスがあります。ここでは、それらを1つずつ紹介します。

enter image description here

BaseUtil

BaseUtilは、WebDriverofSeleniumの属性を持つクラスです。クラスは非常に単純です。

_public class BaseUtil {

 private WebDriver driver;

 public WebDriver getDriver() {return driver;}

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

フック

Hookクラスには_@Before, @After_が含まれています。 testInitialier()メソッドはwebDriverfileをロードしてインスタンスを作成し、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 ...
}
_

どうすれば実行できますか?

機能ファイルを開く->実行-> Junitで実行

質問

依存性注入につながる方法でメソッドを実行する順序は何ですか?

順序は次のとおりだと思います。

  1. JUnitはtestInitializer()である_@Before_メソッドを呼び出します
  2. testInitializer()はHookクラスにあるため、Hookクラスのインスタンスを作成する必要があります。
  3. それはフッククラスのコンストラクターを呼び出すことにつながります。

しかし、私は残りのステップを理解することはできません。多分それでさえ全く真実ではありません。つまり、関数型コードはありますが、それがどのように機能するか説明できませんか?

11

私が正しく理解しているように、あなたはJUnitをcucumber-springのテストフレームワークとして使用しています。 JUnitは次のライフサイクルを提供します。

メソッドにアノテーション@Beforeでアノテーションを付けると、各テストの前にこのメソッドが呼び出されます。 @Afterについては、リソースのクリーニングに使用でき、各テストの後に呼び出すことができます。

テストを実行するときのテストフロー:

  • testInitializer
  • i_clcik_on_the_button
  • tearDownTest

さらに、System.out.printlnの代わりにロギング(slf4j)を使用すると、テストフローの追跡が容易になります。

1
Levik