在测试之间共享字典数据

时间:2012-08-30 08:51:03

标签: specflow automated-tests

我在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_FIELD的其他字段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           | 

其中And that K_STATUS_FIELD value is valid遍历字段K_STATUS_FIELD的每个有效值,每个值K_KRED_FIELD取自Examples表。

2 个答案:

答案 0 :(得分:1)

您可以在步骤定义中使用字典。当你说出这样的话:&#34;并且K_STATUS_Fields是有效的&#34;并且您在步骤定义中使用循环来遍历所有值。

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

答案 1 :(得分: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
    }