Automated tests 如何在story中连接参数

Automated tests 如何在story中连接参数,automated-tests,jbehave,Automated Tests,Jbehave,如何连接故事中的参数,例如: @When("text {field|link|button} \"$fieldName\" equals \"$value\"") 在我要使用的故事文件中: ... When text "MyField" equals "#{Number} for <Client>" ... Examples: |Client| |MyClient| 。。。 当文本“MyField”等于“#{Number}for” ... 示例: |客户| |我的客户| 但不起

如何连接故事中的参数,例如:

@When("text {field|link|button} \"$fieldName\" equals \"$value\"")
在我要使用的故事文件中:

...
When text "MyField" equals "#{Number} for <Client>"
...
Examples:
|Client|
|MyClient|
。。。
当文本“MyField”等于“#{Number}for”
...
示例:
|客户|
|我的客户|

但不起作用,连接参数的最佳实践是什么?

Yoy可以创建这样的方法:

Then value from field: $name contains values $x and $y
并在java代码中检查$name是否同时包含这两个值

@When("value from field: $name contains values $x and $y")
public void checkValues( String fieldName, String value1, String value2){
   String fieldValue = .... get value from field
   assertThat( fieldValue.contains( value1 ));
   assertThat( fieldValue.contains( value2 ));
}

您还可以创建一个更通用的方法,该方法接受由逗号分隔的值列表:

Then value from field: $name contains values from list:value2,1234,57575, some other string with spaces
它的实施:

@When("value from field: $name contains values from list:$list")
public void checkValues( String fieldName, List<String> list){
   String fieldValue = .... get value from field
   for(String s: list){
      assertThat( fieldValue.contains( s ));
   }
}
@When(“字段中的值:$name包含列表中的值:$list”)
公共无效检查值(字符串字段名、列表){
字符串字段值=…从字段中获取值
用于(字符串s:列表){
(fieldValue.contains)包含的资产;
}
}

您也可以使用Hamcrest库中的一种方便方法:

@When(“字段中的值:$name包含列表中的值:$list”)
公共无效检查值(字符串字段名、列表){
字符串字段值=…从字段中获取值;
资产(字段值,StringContainsOrder.StringContainsOrder(列表));
}

Yoy可以创建如下方法:

Then value from field: $name contains values $x and $y
并在java代码中检查$name是否同时包含这两个值

@When("value from field: $name contains values $x and $y")
public void checkValues( String fieldName, String value1, String value2){
   String fieldValue = .... get value from field
   assertThat( fieldValue.contains( value1 ));
   assertThat( fieldValue.contains( value2 ));
}

您还可以创建一个更通用的方法,该方法接受由逗号分隔的值列表:

Then value from field: $name contains values from list:value2,1234,57575, some other string with spaces
它的实施:

@When("value from field: $name contains values from list:$list")
public void checkValues( String fieldName, List<String> list){
   String fieldValue = .... get value from field
   for(String s: list){
      assertThat( fieldValue.contains( s ));
   }
}
@When(“字段中的值:$name包含列表中的值:$list”)
公共无效检查值(字符串字段名、列表){
字符串字段值=…从字段中获取值
用于(字符串s:列表){
(fieldValue.contains)包含的资产;
}
}

您也可以使用Hamcrest库中的一种方便方法:

@When(“字段中的值:$name包含列表中的值:$list”)
公共无效检查值(字符串字段名、列表){
字符串字段值=…从字段中获取值;
资产(字段值,StringContainsOrder.StringContainsOrder(列表));
}
JBehave还不支持在参数化步骤中部分替换命名参数。有一个未解决的问题和修复程序正在等待批准

以下是对这个问题的简要描述

鉴于我有一个已实施的步骤:

@Given("I do something with parameter $parameter") 
public void doSomething(@Named("parameter") String parameter) 
{
    // ...
}
我有一个场景:

Scenario: Do something
Given I do something with parameter foo-<parameterPart>-bar
Examples:
|parameterPart|
|middle| 
场景:做点什么
假设我使用参数foo--bar做了一些事情
示例:
|参数部件|
|中|
然后,
parameterPart
应正确替换为 例子

foo中间条
值应作为
参数
传递给步骤 实施

JBehave还不支持在参数化步骤中部分替换命名参数。有一个未解决的问题和修复程序正在等待批准

以下是对这个问题的简要描述

鉴于我有一个已实施的步骤:

@Given("I do something with parameter $parameter") 
public void doSomething(@Named("parameter") String parameter) 
{
    // ...
}
我有一个场景:

Scenario: Do something
Given I do something with parameter foo-<parameterPart>-bar
Examples:
|parameterPart|
|middle| 
场景:做点什么
假设我使用参数foo--bar做了一些事情
示例:
|参数部件|
|中|
然后,
parameterPart
应正确替换为 例子

foo中间条
值应作为
参数
传递给步骤 实施


我不确定我是否理解你的问题,但我认为这一行应该更像“When equals”,然后在示例下添加“object | value”,然后替换对象/值对。作为挑剔,通常x=y线更像是“然后”或“给定”而不是“何时”,因为它应该是设置线或评估线。When更像是“当我点击x时”,我在标签“NumberMyClient+someText+NameMyClient”中有一个文本,我想检查这个文本是否相等。文本的两部分及其参数,问题是我想进行串联。我可以分两步编写检查,然后文本“MyField”包含“”,然后文本“MyField”包含“”。如何在一步中完成?仍然不清楚,但实际的串联和比较将在底层步骤代码中完成,不在故事文件步骤定义中。也许您指的是一个步骤行,有两个比较,而只有一个比较,比如
Then contains和
,那么底层Java代码可能是
Assert(labelText.contains(clientNumber)和labelText.contains(clientName))我不确定我是否理解你的问题,但我认为这行应该更像“When equals”,然后在示例下添加“object | value”,后面是要替换的对象/值对。作为挑剔,通常x=y线更像是“然后”或“给定”而不是“何时”,因为它应该是设置线或评估线。When更像是“当我点击x时”,我在标签“NumberMyClient+someText+NameMyClient”中有一个文本,我想检查这个文本是否相等。文本的两部分及其参数,问题是我想进行串联。我可以分两步编写检查,然后文本“MyField”包含“”,然后文本“MyField”包含“”。如何在一步中完成?仍然不清楚,但实际的串联和比较将在底层步骤代码中完成,不在故事文件步骤定义中。也许您指的是一个步骤行,有两个比较,而只有一个比较,比如
Then contains和
,那么底层Java代码可能是
Assert(labelText.contains(clientNumber)和labelText.contains(clientName))这不是我需要的,看上面的评论。这不是我需要的,看上面的评论。