簡體   English   中英

如何在 Cucumber-JVM 的步驟定義中插入字符串變量?

[英]How do I insert a string variable into my step definition in Cucumber-JVM?

我想使用 java 在 Cucumber 中的步驟定義中插入一個預定義的字符串。 這是我所擁有的:

Java代碼

public String temp = "hello";
//insert temp into my step:
@Then("^the "+temp+" should be empty$")
public void the_should_be_empty() throws Throwable {
    //do things
}

但我不斷收到此錯誤

“注解屬性 Then.value 的值必須是常量表達式”

那么,如何在捕獲步驟中插入字符串

==============

更多信息

我正在嘗試在我的許多 BDD 步驟定義中使用一組“全局關鍵字”列表。 所以當我添加一個新的“全局關鍵字”時,它會在我所有的 BDD 中改變。 例如(red|yellow|green)可以在 10 個不同的 BDD 步驟中使用,我想在不更改所有 10 個步驟的情況下添加blue 相反,我想要一個包含列表的字符串變量,然后將此變量插入到我的 BDD 中。

簡短的回答是:“你沒有”。

更長的是注解中的值必須是常量。 它不能是構建運行時的東西。

Cucumber 在 Java 和場景之間匹配步驟的方式是使用您在注釋中定義的正則表達式。 如果該值是在運行時構造的,則該過程失敗。 Cucumber runner 將定位並使用在步驟實現中找到的所有正則表達式,然后搜索特征文件以將代碼與場景步驟匹配。

這就是您無法構建字符串以匹配運行時的原因。

理解為什么要構建字符串運行時會很有趣。 你想達到什么目的? 創建許多不同的字符串的結果是,您的場景中必須有許多不同的步驟應該匹配。 對我來說,感覺就像你誤會了什么。 請分享您正在努力實現的目標,也許我們可以用另一種方法幫助您。

您可以通過使用自定義參數類型來實現這一點。

定義后,您的步驟 def 將如下所示:

@Then("the {color} should be empty")
public void the_should_be_empty(Color color) throws Throwable {
    //do things
}

現在,如果顏色列表發生變化,您不必編輯每個 stepdef。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM