代码之家  ›  专栏  ›  技术社区  ›  Torikul Alam

如何在cucumber中拆分示例

  •  0
  • Torikul Alam  · 技术社区  · 7 年前

    假设我有一个黄瓜场景,比如:

    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个步骤包含新数据。这看起来很烦人。有什么方法可以把这个示例表放到列中吗。如果不可能进行列spit,则任何其他建议。

    3 回复  |  直到 7 年前
        1
  •  1
  •   diabolist    7 年前

    每一行示例背后都应该有一个原因。如果两行后面有相同的原因,那么您只是在浪费运行时重复自己。

    让我们举一个简单的例子

    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. 通过具体化示例的细节,您可以围绕特定主题编写更多场景。

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

    • 使用多个示例解决您的问题
    • 帮助您编写更好的场景和代码。找出每个示例背后的原因有助于编写更好的代码。
        2
  •  0
  •   Stéphane GRILLON    7 年前

    您没有任何其他解决方案。示例的目的尤其是有几行:

    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"
    
        3
  •  0
  •   Chuck van der Linden    7 年前

    您可以将示例分成不同的组,其中示例有一个共同的主题,您甚至可以标记这些组

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

    这使您能够更好地理解给定示例值组的目的,甚至可以使用标记运行场景概要的子集。

    要记住的关键是,每一组示例的标题行都必须在那里(我总是试图将它们分割开来,并将其忽略,从而导致错误)