如何拆分黄瓜中的示例
How to split Examples in cucumber
假设我有一个像这样的黄瓜场景:
Scenario Outline: do something
Given do something with "<data1>"
AND done some process on "<data2>"
When again done some experiment on "<data3>"
Then checking "<result>"
Examples:
| data1 | data2 | data3 |result |
| value1| value2| value3| result1|
这个场景完全没问题,但想象一下这个场景还有 5 个新数据步骤。这看起来很烦人。有什么办法可以将这个示例 table 吐到专栏中。如果列吐不可能,那么任何其他建议。
您没有任何其他解决方案。例子的目的是特别有几行:
Examples:
| data1 | data2 | data3 |result |
| value1| value2| value3| result1|
| value11| value12| value13| result2|
| value21| value22| value23| result3|
如果你没有几行,可以直接把数据放在你的场景中(不是Scenario Outline
):
Scenario : do something
Given do something with "value1"
AND done some process on "value2"
When again done some experiment on "value3"
Then checking "result1"
每一行示例都应该有其背后的原因。如果两行背后的原因相同,那么你只是在浪费运行时间。
举个简单的例子
Scenario Outline
When I register as <account> with <passsword>
Then I should be <result>
Examples
| account | password | result |
| free | too_short | unregistered |
| taken | ok | unregistered |
...
您可以用两个更简单的场景轻松替换这个复杂的场景
Scenario: register with too short a password
When I register with too short a password
Then I should be told I need a longer password
Scenario: register with existing account
When I register with an existing account
Then I should be told the account is taken
喜欢以这种方式做事有几个原因
- 每个场景都更易于阅读
- 每个场景都会告诉您行为是什么以及为什么它很重要(通过示例您必须从数据中推断)
- 每个步骤的定义都更容易实现
- 通过具体说明示例的细节,您可以围绕特定主题编写更多场景。
您可以将此模式应用于每个情景大纲,这样做会
- 用很多例子解决你的问题
- 帮你写出更好的场景和代码。找出每个示例背后的原因有助于您编写更好的代码。
我无法理解你想要做什么,或者你所说的 'column split' 是什么意思,所以不确定这是否回答了你的问题。
您可以将示例分成具有共同主题的不同组,您甚至可以标记这些组
@golden_path
Examples: valid values
| data1 | data2 | data3 | result |
| value1 | value2 | value3 | result1 |
| bar | foo | fizz | buzz |
@low_boundary @negative_test
Examples: low boundaries
| data1 | data2 | data3 | result |
| 0 | smag | cruft | resultx |
| bar | 0 | fizz | resulty |
这可以让您更好地理解给定示例值组的用途,甚至可以基于使用标签的 运行 场景大纲子集。
要记住的关键是每组示例都必须有 header 行(我总是尝试将它们分开并忽略它,从而导致错误)
假设我有一个像这样的黄瓜场景:
Scenario Outline: do something
Given do something with "<data1>"
AND done some process on "<data2>"
When again done some experiment on "<data3>"
Then checking "<result>"
Examples:
| data1 | data2 | data3 |result |
| value1| value2| value3| result1|
这个场景完全没问题,但想象一下这个场景还有 5 个新数据步骤。这看起来很烦人。有什么办法可以将这个示例 table 吐到专栏中。如果列吐不可能,那么任何其他建议。
您没有任何其他解决方案。例子的目的是特别有几行:
Examples:
| data1 | data2 | data3 |result |
| value1| value2| value3| result1|
| value11| value12| value13| result2|
| value21| value22| value23| result3|
如果你没有几行,可以直接把数据放在你的场景中(不是Scenario Outline
):
Scenario : do something
Given do something with "value1"
AND done some process on "value2"
When again done some experiment on "value3"
Then checking "result1"
每一行示例都应该有其背后的原因。如果两行背后的原因相同,那么你只是在浪费运行时间。
举个简单的例子
Scenario Outline
When I register as <account> with <passsword>
Then I should be <result>
Examples
| account | password | result |
| free | too_short | unregistered |
| taken | ok | unregistered |
...
您可以用两个更简单的场景轻松替换这个复杂的场景
Scenario: register with too short a password
When I register with too short a password
Then I should be told I need a longer password
Scenario: register with existing account
When I register with an existing account
Then I should be told the account is taken
喜欢以这种方式做事有几个原因
- 每个场景都更易于阅读
- 每个场景都会告诉您行为是什么以及为什么它很重要(通过示例您必须从数据中推断)
- 每个步骤的定义都更容易实现
- 通过具体说明示例的细节,您可以围绕特定主题编写更多场景。
您可以将此模式应用于每个情景大纲,这样做会
- 用很多例子解决你的问题
- 帮你写出更好的场景和代码。找出每个示例背后的原因有助于您编写更好的代码。
我无法理解你想要做什么,或者你所说的 'column split' 是什么意思,所以不确定这是否回答了你的问题。
您可以将示例分成具有共同主题的不同组,您甚至可以标记这些组
@golden_path
Examples: valid values
| data1 | data2 | data3 | result |
| value1 | value2 | value3 | result1 |
| bar | foo | fizz | buzz |
@low_boundary @negative_test
Examples: low boundaries
| data1 | data2 | data3 | result |
| 0 | smag | cruft | resultx |
| bar | 0 | fizz | resulty |
这可以让您更好地理解给定示例值组的用途,甚至可以基于使用标签的 运行 场景大纲子集。
要记住的关键是每组示例都必须有 header 行(我总是尝试将它们分开并忽略它,从而导致错误)