cucumber-步驟定義 (java版)

步驟定義是一個帶有表達式的Java方法,該表達式將其鏈接到一個或多個小黃瓜步驟。當Cucumber在場景中執行小黃瓜步驟時,它將尋找一個匹配的步驟定義來執行。

爲了說明這是如何工作的,請看下面的小黃瓜場景:

Scenario: Some cukes
  Given I have 48 cukes in my belly

作爲step一部分的 I have 48 cukes in my belly ( Given關鍵字後面的文本)將匹配以下步驟定義:

package foo;
import cucumber.api.java.en.Given;

public class MyStepdefs {
    @Given("I have {int} cukes in my belly")
    public void i_have_n_cukes_in_my_belly(int cukes) {
        System.out.format("Cukes: %n\n", cukes);
    }
}

或者,使用Java8 lambdas:

package foo;
import cucumber.api.java8.En;

public class MyStepdefs implements En {
    public MyStepdefs() {
        Given("I have {int} cukes in my belly", (Integer cukes) -> {
            System.out.format("Cukes: %n\n", cukes);
        });
    }
}

表達式

步驟定義的表達式可以是正則表達式,也可以是Cucumber表達式。如果使用正則表達式,則將匹配中的每個捕獲組作爲參數傳遞給步驟定義的方法。

@Given("I have {int} cukes in my belly")
public void i_have_n_cukes_in_my_belly(int cukes) {
}

如果捕獲組表達式與已註冊參數類型的regexp相同,則捕獲的字符串將在傳遞給步驟定義的方法之前進行轉換。在上面的示例中,cukes參數將是一個整數,因爲內置int參數類型的regexp是\d+

狀態管理

通過在實例變量中存儲狀態,步驟定義可以將狀態傳遞給後續步驟定義。

範圍

步驟定義不鏈接到特定的功能文件或場景。文件、類或包名不影響步驟定義將匹配到什麼小黃瓜步驟。唯一會影響的是步驟定義的表達式。

代碼片段

當Cucumber遇到沒有匹配步驟定義的小黃瓜步驟時,它將打印一個帶有匹配Cucumber表達式的步驟定義片段。您可以將此作爲新步驟定義參考。

考慮一下這個小黃瓜步驟:

Given I have 3 red balls

如果你沒有一個匹配的步驟定義,Cucumber會給出如下代碼片段作爲參考:

@Given("I have {int} red balls")
public void i_have_red_balls(int int1) {
}

如果建議的代碼段與未定義步驟的部分匹配,則它們將使用您自己的參數類型。如果存在Color參數類型,Cucumber會在建議的表達式中使用:

@Given("I have {int} {color} balls")
public void i_have_red_balls(int int1, Color color) {
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章