Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jbehave示例表的问题_Java_Jbehave - Fatal编程技术网

Java jbehave示例表的问题

Java jbehave示例表的问题,java,jbehave,Java,Jbehave,我在jbehave从事自动化工作。我有一个场景,其中我有多个步骤。现在,其中两个步骤具有相同的输入参数名称。一个是从示例表中传递值,另一个是在语句本身中传递值,即使它只从示例表中获取值 我知道我可以更改java/jbehave语句中的输入参数名称,但这是不可能的,因为这两个语句都被多次使用,并且对于一个场景,我不能破坏所有现有场景 任何关于这一点的线索或任何面临类似情况的人也应该对此发表评论 代码片段 故事档案 情景: 给定我传递值“1” 我从临时文件中获取值 例子 价值观| 二, java文件

我在jbehave从事自动化工作。我有一个场景,其中我有多个步骤。现在,其中两个步骤具有相同的输入参数名称。一个是从示例表中传递值,另一个是在语句本身中传递值,即使它只从示例表中获取值

我知道我可以更改java/jbehave语句中的输入参数名称,但这是不可能的,因为这两个语句都被多次使用,并且对于一个场景,我不能破坏所有现有场景

任何关于这一点的线索或任何面临类似情况的人也应该对此发表评论

代码片段

故事档案

情景:

给定我传递值“1”

我从临时文件中获取值

例子

价值观|

二,

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

现在这里的问题是,对于第一个语句,即使我从语句中传递值“1”,它也只是从示例表中获取值,即“2”。

我在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|
Scenario: some scenario

Given I pass value '1'
Given I pass value '<value>'

........

Examples: 
|value|
|2|
|3|
我使用maven jbehave simple原型在Eclipse中创建了一个项目。 您可以从以下链接将此项目克隆到Eclipse中: 要更改版本,只需在pom.xml=>3.9.5中编辑它

=============编辑================ 考虑在JBehve配置中设置已使用的EndiTrimeDealPrimeStrue选项 他们在文档中写道,从版本4.0.4开始,默认情况下启用此选项

我们可以将JBehave配置为将分隔符之间包含的名称解释为参数名称,并在examples表提供的参数中查找它。参数查找的默认行为通过ParameterControls被覆盖:

在这种模式下,step方法看起来要简单得多:

从版本4.0开始,使用定界符命名参数是默认行为

我测试了这个选项,它似乎在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|
Scenario: some scenario

Given I pass value '1'
Given I pass value '<value>'

........

Examples: 
|value|
|2|
|3|
给定I pass值“1”的第一步是将1作为参数。
给定的第二步I pass value按名称与示例表中名为的列匹配,并从此表中获取值。

我更新了问题。您使用哪个版本的JBehave?我在最新版本中测试了您的案例,它按预期工作。@kordirko我使用的是3.9.5。我看到的最新版本是4.0.4。您能否提供成功运行此方案的测试文件?在第一个函数fn中,您没有提到带有@Named的参数。如果你像第二个函数那样做,我想你会遇到和我一样的问题。我错过了问题本身的那一部分,我编辑了问题中的那一部分。@Pratik Zinzuvadiya我在答案中添加了使用useDelimiterNamedParameterstrue解决此问题的方法;参数
Scenario: some scenario

Given I pass value '1'
Given I pass value '<value>'

........

Examples: 
|value|
|2|
|3|
   @Given("I pass value '$value'")
    public void fn(int value)
    {
       System.out.println("GIVEN : I pass value = " + value);
    }