Java 如何判断JVM中步骤操作的表的哪一行?

Java 如何判断JVM中步骤操作的表的哪一行?,java,cucumber,gherkin,cucumber-java,Java,Cucumber,Gherkin,Cucumber Java,我试图在“场景大纲”下的“示例”中处理当前行数。如何获取步骤定义中的当前行数?我不想在示例中传递数字。有办法吗 Scenario Outline: When the name is entered as "<fruit>" <days> Examples: |fruit|days| |Apple|10| |Orange|12| |Guava|3| ... 我能想到的最好的方法(不是很漂亮)是自己数数幕后的行数: priv

我试图在“场景大纲”下的“示例”中处理当前行数。如何获取步骤定义中的当前行数?我不想在示例中传递数字。有办法吗

Scenario Outline:
    When the name is entered as "<fruit>" <days>

Examples:
    |fruit|days|
    |Apple|10|
    |Orange|12|
    |Guava|3|
    ...

我能想到的最好的方法(不是很漂亮)是自己数数幕后的行数:

private static int rowIndex = 0;

@When("^I enter the name as \"([^\"]+)\"$")
public void i_enter_the_name_as(String fruit) {
    rowIndex++;
    // now you can use it in this and subsequent steps
}

只有在单个场景大纲中使用“I enter the name as”时,这才有效。如果您想在多个场景中使用它,请概述我能想到的最好方法是在不同的场景中重置计数器。

我能想到的最好方法(这不是很漂亮)是自己计算幕后的行数:

private static int rowIndex = 0;

@When("^I enter the name as \"([^\"]+)\"$")
public void i_enter_the_name_as(String fruit) {
    rowIndex++;
    // now you can use it in this and subsequent steps
}
private Scenario scenario;

@Before
public void before(Scenario sce) {
    this.scenario = sce;
    System.out.println("SCENARIO ID -- " +scenario.getId());
}
只有在单个场景大纲中使用“I enter the name as”时,这才有效。如果您想在多个场景中使用它,那么我能想到的最好的办法就是在不同的场景中重置计数器

private Scenario scenario;

@Before
public void before(Scenario sce) {
    this.scenario = sce;
    System.out.println("SCENARIO ID -- " +scenario.getId());
}
您将得到一个类似于场景大纲的字符串-功能描述;场景概述;示例说明;行数+1

对于一个简单的场景,您将得到-功能描述;场景描述

对于场景大纲案例,您可以使用分隔符“;”拆分,并使用减去1后的最后一部分

这有点像黑客,取决于此模式中剩余的场景id字符串

您将得到一个类似于场景大纲的字符串-功能描述;场景概述;示例说明;行数+1

对于一个简单的场景,您将得到-功能描述;场景描述

对于场景大纲案例,您可以使用分隔符“;”拆分,并使用减去1后的最后一部分


这是一个小技巧,取决于此模式中剩余的场景id字符串。

对于示例表cucumber或任何DI框架中的每个场景行,都将初始化一个新的步骤定义类,因此它将始终显示1。尝试为rowIndex输入static。您还可以将scenario对象放入Before钩子中,并查看scenario.getId()方法。我不确定,但它返回一个带有行号的整数。scenario.getId()返回以下字符串功能描述:scenariooutline描述:示例描述:rownumber+1。是的,应该是静态的。不知道我为什么把它拿出来@蚱蜢:另一个听起来像是另一个答案。@Daveshweisguth是的,你是对的。将添加作为答案。对于示例表中的每一个场景行,cucumber或任何DI框架都会初始化一个新的步骤定义类,所以它总是显示1。尝试为rowIndex输入static。您还可以将scenario对象放入Before钩子中,并查看scenario.getId()方法。我不确定,但它返回一个带有行号的整数。scenario.getId()返回以下字符串功能描述:scenariooutline描述:示例描述:rownumber+1。是的,应该是静态的。不知道我为什么把它拿出来@蚱蜢:另一个听起来像是另一个答案。@Daveshweisguth是的,你是对的。将添加作为答案。只是看起来有点像黑客。