gpt4 book ai didi

java - Cucumber 场景断言 DataTable 中的条件

转载 作者:行者123 更新时间:2023-12-02 03:19:18 27 4
gpt4 key购买 nike

我在 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”、“Then Task1”,然后执行“When Task2 then Task2”等,因为下一个任务启动时状态信息会丢失。而不是先调用所有 When Task1,2,3,然后再调用 then Task1,2,3。

还会有很多+50的任务,因此将其分成单独的步骤并不理想。

我可以将“何时/然后”合并为一个步骤,但这似乎不对。

有什么建议吗?

最佳答案

如何使用场景大纲。这会将每个任务本身作为一个场景运行。

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

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|
.......

如果参数和结果的数量可变,请使用符号分隔的字符串修改它们。您可以在步骤定义中使用@Transform注释来获取参数或结果的对象。

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>

Examples:
| TaskName | Parameters | Outcomes |
| task1 | t1param1,t1param2,t1param3| t1out1,t1out2,t1out3 |
| task2 | t2param1,t2param2,t2param3| t2out1,t2out2,t2out3 |
.......

如果一项任务对另一项任务的结果有任何依赖性,那么您必须小心处理它们。如果任何任务中需要,您甚至可以在当前的“Then”步骤之后添加一个重置步骤,例如终止当前进程等。

<小时/>

最后一个场景 --- 这是一个很大的 hack,依赖于场景 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());
}

您将得到一个类似于场景大纲的字符串 - **feature-description ;场景大纲-描述;示例描述;行号 + 1**。例如——validating-sample;so1;se1;2。这将用于示例表的第一行。

对于场景大纲案例,您可以使用分隔符“;”进行分割并使用减去 1 后的最后一部分。将此逻辑放入方法 getCurrentExamplesRow()

@Then("^Last step to run for last scenario (\\d+)$")
public void lastStep(int size) {

// Will be called only for last scenario in examples...
if(size==getCurrentExamplesRow()) {

}
}

关于java - Cucumber 场景断言 DataTable 中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39831105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com