我正在jbehave从事自动化工作。我有一个场景,我有多个步骤。现在,这两个步骤具有相同的输入参数名称。对于一个我从示例表中传递值而对于其他我在语句本身传递值,即使它仅从示例表中获取值。
我知道我可以在java / jbehave语句中更改输入参数名称,但这是不可能的,因为这两个语句都是多次使用的,对于一个场景我无法破坏所有现有场景。
对此或任何遇到类似情况的人的任何线索也应对此发表评论。
代码段
故事档案
Scenario :
Given I pass value '1'
And I take value from temp file '<value>'
Examples
value |
2
java文件:
@Given("I pass value '$value'")
public void fn(@Named("value") int value)
{
------
}
@Given("I take value from temp '$value'")
public void fn2(@Named("value") int value)
{
-----
}
现在这里的问题是,即使我正在传递价值,也是第一个声明。&#39; 1&#39;从声明来看,它仅从示例表中获取值,即&#39; 2&#39;。
答案 0 :(得分:0)
我在JBehave的3.9.5和4.0.4版本上测试了类似的场景,它在两个版本上都运行良好。
这是我的情景:
Scenario: some scenario
Given I pass value '1'
Given I take value from temp file '<value>'
Examples:
|value|
|2|
|3|
这是我的java代码:
public class MySteps {
@Given("I pass value '$value'")
public void fn(int value)
{
System.out.println("GIVEN : I pass value = " + value);
}
@Given("I take value from temp file '$value'")
public void fn2( @Named("value") int value)
{
System.out.println("GIVEN : I take value from temp = " + value);
}
}
我使用maven jbehave-simple-archetype
在Eclipse中创建了一个项目
您可以通过以下链接将此项目克隆到Eclipse中:https://github.com/kordirko/jb_test
要更改版本,只需在pom.xml =&gt;中编辑它即可。 <jbehave.core.version>3.9.5</jbehave.core.version>
==========编辑================
考虑在JBehve配置中设置useDelimiterNamedParameters(true)
选项
http://jbehave.org/reference/stable/parametrised-scenarios.html
他们在文档中写入,从版本4.0.4开始,默认情况下启用此选项。
我们可以将JBehave配置为将分隔符之间包含的名称解释为参数名称,并在examples表提供的参数中查找。参数查找的默认行为通过ParameterControls覆盖:
new MostUsefulConfiguration()
.useParameterControls(new ParameterControls().useDelimiterNamedParameters(true));
在此模式下,步骤方法看起来会简化:
@Given("a stock of $symbol and a $threshold")
public void aStock(String symbol, double threshold) {
// ...
}
从版本4.0开始,使用分隔符命名参数是默认行为。
我测试了这个选项,它似乎在3.9.5和4.0.4版本中都有效。
这是一个测试场景:
Scenario: some scenario
Given I pass value '1'
Given I pass value '<value>'
........
Examples:
|value|
|2|
|3|
和java方法没有@Named注释:
@Given("I pass value '$value'")
public void fn(int value)
{
System.out.println("GIVEN : I pass value = " + value);
}
第一步Given I pass value '1'
将1
作为参数
第二步Given I pass value '<value>'
按名称与<value>
匹配示例表中名为<value>
的列,并从此表中获取值。