6

说我有:

@Given("first name is $firstName")
@Given("first name is $firstName and last name is $lastName")

以下步骤将被标记为模棱两可:

Given first name is John and last name is Smith

如果不使用引号将第一个参数括起来,如何修复此步骤使其仅匹配第二个参数?使用引号将两个参数分别括起来也有同样的歧义问题。

每个参数的长度是否有限制?是否有某些字符不能传入?

4

3 回答 3

8

您可以通过使用步骤优先级来解决此问题,如此处所述:http: //jbehave.org/reference/stable/prioritising-steps.html

您的问题可以通过使用两个参数为变体设置更高的优先级来解决:

@Given("first name is $firstName")
@Given(value = "first name is $firstName and last name is $lastName", priority = 1)

我尝试了您的示例,并且通过这种组合,这两个步骤被分开了。

(编辑:我最初的解决方案有参数的引号,但它也可以正常工作)

于 2012-12-06T10:18:55.557 回答
1

我认为这种情况可以这样写:

Given first name is John
And last name is Smith

和步骤:

@Given("first name is $firstName")
@And("last name is $lastName")

您可以先创建人员对象,然后在“@Given”步骤中设置名称和姓氏。
如果您需要添加其他属性,例如电子邮件,您只需要创建另一个步骤:

@And("the email is $email")
public addEmail(String email) {
    person.setEmail(email);
}

所以这个问题不会发生,你的代码将更可重用。

于 2012-12-05T11:32:17.553 回答
0

对我有用的是用脚踝括号(<>)代替美元符号($),即

@Given("a person with first name <firstName>")

@Given("a person with first name <firstName> and last name <lastName>")
于 2017-05-09T14:59:32.597 回答