如何拆分黄瓜中的示例

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

喜欢以这种方式做事有几个原因

  1. 每个场景都更易于阅读
  2. 每个场景都会告诉您行为是什么以及为什么它很重要(通过示例您必须从数据中推断)
  3. 每个步骤的定义都更容易实现
  4. 通过具体说明示例的细节,您可以围绕特定主题编写更多场景。

您可以将此模式应用于每个情景大纲,这样做会

  • 用很多例子解决你的问题
  • 帮你写出更好的场景和代码。找出每个示例背后的原因有助于您编写更好的代码。

我无法理解你想要做什么,或者你所说的 '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 行(我总是尝试将它们分开并忽略它,从而导致错误)