Java JBehave模糊步长

Java JBehave模糊步长,java,ambiguity,jbehave,Java,Ambiguity,Jbehave,假设我有: @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 如果不使用引号括住第一个参数,如何修复此步骤,使其仅与第二个参数匹配?使用引号分别包围这两个参数也有同样的歧义问题 每个参数的长度是否有限制?是否有某些字符无法传入?

假设我有:

@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
如果不使用引号括住第一个参数,如何修复此步骤,使其仅与第二个参数匹配?使用引号分别包围这两个参数也有同样的歧义问题


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

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

Given first name is John
And last name is Smith
步骤如下:

@Given("first name is $firstName")
@And("last name is $lastName")
您可以先创建person对象,然后在“@Given”步骤中设置名称和姓氏。
如果需要添加其他属性(如电子邮件),只需创建另一个步骤:

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

因此,这个问题不会发生,您的代码将更加可重用。

您可以通过使用步骤优先级来解决这个问题,如下所述:

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

@Given("first name is $firstName")
@Given(value = "first name is $firstName and last name is $lastName", priority = 1)
我尝试了你的例子,通过这种组合,两个步骤是分开的


(编辑:我的初始解决方案中有参数的引号,但没有引号也可以使用)

对我有效的方法是用踝括号()代替美元符号($),即

@Given(“有名字的人”)

@Given(“有名字和姓氏的人”)

对不起,我想这是对我想要的示例的一个糟糕的简化。让我试着把它改写得更好:@Given(“名为$firstName的人”)@Given(“名为$firstName、姓为$lastName的人”),其中调用这些步骤将创建新的person对象。然后以下步骤将被标记为不明确:给定一个名为John和姓氏Smith的人,它可以将其解析为创建一个名为“John和姓氏Smith”或名为“John”和姓氏“Smith”的人。您不需要在所有“给定”步骤中创建对象,您可以在属性和“创建对象时”步骤中存储名称和姓氏。我用这个(类似的)来搭配这个。我认为这种方法更具可重用性。是的,我知道如何将其拆分为单独的步骤以使其工作,但我想看看是否有一种方法可以将其作为一个步骤,因为我想创建许多对象,并根据需要设置某些属性。谢谢!我不知道步骤的优先顺序。这将非常方便。:)
@Given("a person with first name <firstName>")
@Given("a person with first name <firstName> and last name <lastName>")