Java 数据表中的断言条件

Java 数据表中的断言条件,java,cucumber,cucumber-jvm,Java,Cucumber,Cucumber Jvm,我在Cucumber jvm中有以下场景,我想知道写这篇文章的最佳方式是什么 Given I create a process When I execute the following tasks with parameters: |Task Name| param1 | param2| param3| ... Then each task should have outcomes: |Task Name| outcome1 | outcome2| outcome3| 最好的方法是什么 由于下

我在Cucumber jvm中有以下场景,我想知道写这篇文章的最佳方式是什么

Given I create a process
When I execute the following tasks with parameters:
|Task Name| param1 | param2| param3|
...
Then each task should have outcomes:
|Task Name| outcome1 | outcome2| outcome3|
最好的方法是什么

由于下一个任务启动时状态信息丢失,我需要执行When Task1、Task1、When Task2、Task2等。而不是先调用所有When Task1,2,3,然后再调用当时的Task1,2,3

在+50的情况下,还会有很多任务,因此将其拆分为单独的步骤并不理想

我可以将When/Then合并为一个步骤,但这似乎不对


有什么建议吗?

使用场景大纲怎么样。这将每个任务本身作为一个场景运行

为了避免重复给定步骤,您可以在步骤定义java中设置一个静态布尔变量,并将其作为标志进行检查

Scenario Outline:
Given I create a process
When I execute the following task <TaskName> with parameters:
|<Parameter1>|<Parameter2>|<Parameter3>|
Then each task <TaskName> should have outcomes:
|<Outcome1>|<Outcome2>|<Outcome3>|

Examples:
|TaskName|Parameter1|Parameter2|Parameter3|Outcome1|Outcome2|Outcome3|
|task1|t1param1|t1param2|t1param3|t1out1|t1out2|t1out3|
|task2|t2param1|t2param2|t2param3|t2out1|t2out2|t2out3|
.......
如果一项任务的结果依赖于另一项任务的结果,那么你必须小心处理它们。如果在任何任务中需要,您甚至可以在当前步骤之后添加重置步骤,如终止当前进程等


最后一个场景——这是一个很大的攻击,依赖于场景id保持不变。 在示例表中为最后一步添加场景计数,如下所示

Scenario Outline:

    Given I create a process
    When I execute the following task <TaskName> with parameters <parameters>
    Then each task <TaskName> should have outcomes <outcomes>
    ***And Last step to run for last scenario 3***

    Examples:
    | TaskName | Parameters | Outcomes |
    | task1 | t1param1,t1param2,t1param3| t1out1,t1out2,t1out3 |
    | task2 | t2param1,t2param2,t2param3| t2out1,t2out2,t2out3 |
    | task3 | t3param1,t3param2,t3param3| t3out1,t3out2,t3out3 |


Include in StepDefinition.java

private Scenario scenario;

@Before
public void before(Scenario sce) {
    this.scenario = sce;
    System.out.println("SCENARIO ID -- " +scenario.getId());
}

使用场景大纲怎么样。这将每个任务本身作为一个场景运行

为了避免重复给定步骤,您可以在步骤定义java中设置一个静态布尔变量,并将其作为标志进行检查

Scenario Outline:
Given I create a process
When I execute the following task <TaskName> with parameters:
|<Parameter1>|<Parameter2>|<Parameter3>|
Then each task <TaskName> should have outcomes:
|<Outcome1>|<Outcome2>|<Outcome3>|

Examples:
|TaskName|Parameter1|Parameter2|Parameter3|Outcome1|Outcome2|Outcome3|
|task1|t1param1|t1param2|t1param3|t1out1|t1out2|t1out3|
|task2|t2param1|t2param2|t2param3|t2out1|t2out2|t2out3|
.......
如果一项任务的结果依赖于另一项任务的结果,那么你必须小心处理它们。如果在任何任务中需要,您甚至可以在当前步骤之后添加重置步骤,如终止当前进程等


最后一个场景——这是一个很大的攻击,依赖于场景id保持不变。 在示例表中为最后一步添加场景计数,如下所示

Scenario Outline:

    Given I create a process
    When I execute the following task <TaskName> with parameters <parameters>
    Then each task <TaskName> should have outcomes <outcomes>
    ***And Last step to run for last scenario 3***

    Examples:
    | TaskName | Parameters | Outcomes |
    | task1 | t1param1,t1param2,t1param3| t1out1,t1out2,t1out3 |
    | task2 | t2param1,t2param2,t2param3| t2out1,t2out2,t2out3 |
    | task3 | t3param1,t3param2,t3param3| t3out1,t3out2,t3out3 |


Include in StepDefinition.java

private Scenario scenario;

@Before
public void before(Scenario sce) {
    this.scenario = sce;
    System.out.println("SCENARIO ID -- " +scenario.getId());
}

您的问题是由执行此步骤引起的

When I execute the following tasks with parameters:
|Task Name| param1 | param2| param3|
...
这是一个很糟糕的使用黄瓜的方法。相反,您应该用格式的单个步骤替换此步骤的每个实例

When I xxx
然后,您的任务是找到xxx的替代品(名称)。这些名称应该描述执行所有任务的综合效果

实际上,不管你有什么任务或有多少任务,你总能找到一个名称来封装所有任务

现在,新命名的任务(HOW)所执行的任务列表可以在堆栈的下一层定义。这可能在步骤定义、步骤定义的帮助器方法中,或者更好的是在实际代码中

找到这个单一名称的过程称为抽象。这是你每天都在用的东西——你泡的是一杯茶,而不是咖啡

fill the kettle with 350ml of cold water
switch of the kettle just before its boiled
pour 5ml of water into each cup to warm them
switch on the kettle until its boiled
... 
...
zzzzzz
在你的场景中,你所做的就像是对某人说所有那些东西,而不是泡茶一样愚蠢


Cucumber使用自然语言的全部目的是允许场景作者使用自然语言的力量来编写简单且富有表现力的内容。每次你在一个场景中漏掉了一些事情的细节,你就不能有效地使用语言。

你的问题就是由于这个步骤造成的

When I execute the following tasks with parameters:
|Task Name| param1 | param2| param3|
...
这是一个很糟糕的使用黄瓜的方法。相反,您应该用格式的单个步骤替换此步骤的每个实例

When I xxx
然后,您的任务是找到xxx的替代品(名称)。这些名称应该描述执行所有任务的综合效果

实际上,不管你有什么任务或有多少任务,你总能找到一个名称来封装所有任务

现在,新命名的任务(HOW)所执行的任务列表可以在堆栈的下一层定义。这可能在步骤定义、步骤定义的帮助器方法中,或者更好的是在实际代码中

找到这个单一名称的过程称为抽象。这是你每天都在用的东西——你泡的是一杯茶,而不是咖啡

fill the kettle with 350ml of cold water
switch of the kettle just before its boiled
pour 5ml of water into each cup to warm them
switch on the kettle until its boiled
... 
...
zzzzzz
在你的场景中,你所做的就像是对某人说所有那些东西,而不是泡茶一样愚蠢


Cucumber使用自然语言的全部目的是允许场景作者使用自然语言的力量来编写简单且富有表现力的内容。每次你在一个场景中漏掉某件事的细节,你就无法有效地使用语言。

感谢Grasshopper,我正在执行的任务是相互依赖的,必须按照指定的顺序执行。我不认为这会是一个问题,因为这将是一个调用任务的无状态调用。我将对此进行测试并做出简短的响应。有没有办法打破场景大纲?Ie在示例迭代后执行单个then语句?示例表中的每一行本身都作为一个自包含的场景运行。您想只为示例表中的最后一个场景运行Then步骤,还是为任何依赖于某些逻辑的场景运行Then步骤?只为最后一个步骤断言流程已完成并重置静态变量,因为我需要两个场景大纲,用于略有不同的任务顺序。感谢Grasshopper,我正在执行的任务相互依赖,必须按照指定的顺序执行。我不认为这会是一个问题,因为这将是一个调用任务的无状态调用。我将对此进行测试并做出简短的响应。有没有办法打破场景大纲?Ie在示例迭代后执行单个then语句?示例表中的每一行本身都作为一个自包含的场景运行。您想只为示例表中的最后一个场景运行Then步骤,还是为任何依赖于某些逻辑的场景运行Then步骤?只为最后一个步骤断言流程已完成并重置静态变量,因为我需要两个稍微不同的任务顺序的场景大纲。感谢您的解释