10

我正在创建一个类似于以下的场景大纲(它是一个简化版本,但很好地说明了我的问题):

Given I have a valid operator such as 'MyOperatorName'
    When I provide a valid phone number for the operator 
    And I provide an '<amount>' that is of the following '<type>'
    And I send a request 
    Then the following validation message will be displayed: 'The Format of Amount is not valid'
    And the following Status Code will be received: 'AmountFormatIsInvalid'

Examples:
    | type      | description                     | amount |
    | Negative  | An amount that is negative      | -1.0   |
    | Zero      | An amount that is equal to zero |  0     |
    | ......... | ..........                      | ....   |

示例表提供了我需要的测试数据,但我将添加另一个示例表,其中仅包含操作员的名称(而不是 MyOperatorName),以便为不同的操作员复制测试

Examples: 
   | operator  |
   | op_numb_1 |
   | op_numb_2 |
   | op_numb_3 |

为了避免重复相同的场景大纲三遍;我知道这是不可能的,但我想知道避免在功能内部使用三个不同的场景大纲的最佳方法是什么,除了操作员名称外,它们几乎相同。我知道我可以重复使用相同的步骤定义,但我试图了解是否有最佳实践来防止过于相似的场景使功能混乱。

4

1 回答 1

11

很高兴你知道这是不可能的……那么有什么选择呢?好像有5个:

a:为每个选项制作一个表格(叉积)

Examples:

 | type      | description                     | amount | operator  |
 | Negative  | An amount that is negative      | -1.0   | op_numb_1 |
 | Zero      | An amount that is equal to zero |  0     | op_numb_1 |
 | Negative  | An amount that is negative      | -1.0   | op_numb_2 |
 | Zero      | An amount that is equal to zero |  0     | op_numb_2 |
 | ......... | ..........                      | ....   | ...       | 

湾。使用输入行表对每个运算符重复该场景 - 但您说您不想这样做。

C。使用运算符表对每个输入行重复该场景 - 我喜欢这个选项,因为每个规则都是一个单独的测试。如果您真的,真的想确保您的“操作员”策略的每个不同实现在相同的验证场景中通过和失败,那么为什么不将每个验证场景编写为单个场景大纲:例如

Scenario Outline: Operators should fail on Negative inputs
Given I have a valid operator such as 'MyOperatorName'
When I provide a valid phone number for the operator 
And I send a request with the amount "-1.0"
Then the following validation message will be displayed: 'The Format of Amount is not valid'
And the following Status Code will be received: 'AmountFormatIsInvalid'

Scenario Outline: Operators should fail on Zero inputs
...etc...

d。重新考虑您如何使用 Specflow - 如果您只需要 KEY 示例来说明您的功能(如 Gojko Adzic 的 Specification by Example 所述),那么您通过检查每个组合来过度使用它。但是,如果您使用 specflow 来自动化您的全套集成测试,那么您的场景可能是合适的......但您可能需要考虑 e.

e. 根据您的“操作员”验证逻辑仅在一个地方应用的想法编写集成/单元测试。如果每个运算符的验证都是相同的,为什么不测试一次,然后让所有运算符继承或包含在它们的组合中相同的验证器类?

于 2013-10-31T17:10:09.313 回答