0

我在 Specflow 中有以下场景:

Scenario Outline: K_KRED_FIELD - validation
    Given that K_KRED_FIELD has value <value>
    And that K_STATUS_FIELD has value <value_status>
    When I run rule K_KRED_RULE
    Then value of this field is <validation_result>

Examples: 
    | value         | value_status| validation_result |
    | 0.00          | Cancelled   | valid             |
    | 0.00          |             | invalid           | 

大致思路如下:我检查字段的值K_KRED_FIELD是否有效,取决于其他字段的值 - K_STATUS_FIELDusing rule K_KRED_RULE。我有很多领域和很多这样的规则。

字段K_STATUS_FIELD有许多有效值(大约 50)。当然,可以为这些值中的每一个创建示例,但这很耗时,并且其他一些字段依赖于K_STATUS_FIELD,因此对于每个字段,我需要大约 50 个示例。

是否可以创建具有有效值的字典之类的东西K_STATUS_FIELD并对它们中的每一个运行测试?我在想类似的东西

Scenario Outline: K_KRED_FIELD - validation
    Given that K_KRED_FIELD has value <value>
    And that K_STATUS_FIELD value is valid
    When I run rule K_KRED_RULE
    Then value of this field is <validation_result>

Examples: 
    | value         |  validation_result |
    | 0.00          |  valid             |
    | 0.00          |  invalid           | 

where使用从表中获取的每个值And that K_STATUS_FIELD value is valid迭代字段K_STATUS_FIELD的每个有效值。K_KRED_FIELDExamples

4

2 回答 2

1

您可以在步骤定义中使用字典。当您说:“并且 K_STATUS_Fields 是有效的”并且您在步骤定义中使用循环来遍历所有值时。

这对你来说是一个可能的解决方案,还是我完全理解这个问题?

于 2012-08-30T11:55:29.797 回答
0

您可以将示例表/字典设置为背景:

Background:
    Given the following table
    | value             | result      |
    | 0                 | xxx         |
    | 1                 | yyy         |

Scenario: Scenario 1
    When something is done <value>
    And ...
    Then...
Scenario: Scenario 2
    When ...
    And ...
    Then...

然后:

    [Given(@"the following table")]
    public void GivenTheFollowingTable(Table table)
    {
        foreach (var row in table.Rows)
        {
            //fill up the dictionary
        }

        //add dictionary to Context
        ScenarioContext.Current.Add("ScenarioName", scenarioName);
    }

    [When(@"something is done")]
    public void WhenSomethingIsDone(string value)
    {
        //Get dictionary from Context
        var myDictionary = ScenarioContext.Current.Get<Dictionary<string,string>>("MyDictionary");

        //do something
    }   
于 2012-08-30T21:46:57.547 回答