2012-12-04 81 views
6

说我有: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 

不使用引号包围的第一个参数,如何解决这一步骤,因此只匹配第二个?使用引号将两个参数单独包含也具有相同的歧义问题。

每个参数有多长时间是否有限制?是否有某些字符无法传入?

回答

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) 

我想你的榜样并且通过这种组合,两个步骤被分开。

(编辑:我最初的解决方案必须为参数报价,但它的作品不一样)

+1

谢谢!我不知道步骤的优先顺序。这将非常方便。 :) – user1877292

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); 
} 

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

+0

对不起,我想这是我想做什么一个例子的坏简化。 让我试着更好地改换: @Given(“有名字的firstName $一个人”) @Given(“与名字$ firstName和姓氏$ lastName的人”) 其中调用这些步骤会创建新的人物对象。 然后下面的步骤将被标记为不明确: 鉴于一个人的名字约翰和姓氏史密斯 它可以解析为创建一个名为“约翰和姓氏史密斯”或名为“约翰“和姓氏”史密斯“。 – user1877292

+0

您不需要在所有“给定”步骤中创建对象,您可以将名称和姓氏存储在属性中,并在“何时”步骤中创建对象。我在[例子](http:// github。)中使用这个(类似的)com/piantino/automated-traceability-example/blob/master/scrumforge-acceptance-test-jbehave/src/test/java/org/scrumforge/acceptance/test/CreateUserStoryTest.java)[https:// github.com/piantino/automated-traceability-example/blob/master/scrumforge-acceptance-test-jbehave/src/test/resources/stories/manage_resources/scrum_team/CreateUser.story)。我认为这种方法更具可重用性。 –

+0

是的,我了解如何将其拆分为单独的步骤以使其可行,但我想知道是否有办法将其作为一步,因为我想创建大量对象,并将某些属性设置为需要。 – user1877292

0

什么工作对我来说是代替脚踝括号(<>)的美元符号($),即

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

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