2017-08-22 7 views
0

Specflowでは、Scenario Outline/Examples機能について知っていますが、テストケースで使用する範囲と組み合わせを生成するより洗練された方法があるのでしょうか?Specflowシナリオのサンプル範囲を自動生成する

たとえば、バニラNUnitでは、私はTestCaseSourceまたはTheoryを使用して、多数のテストケースをテストに投入できるジェネレータを構築できます。現時点では

private static readonly IEnumerable<int> Numbers = Enumerable.Range(1, 50); 

[TestCaseSource(nameof(Numbers))] 
public void TestFoo(int number) 
{ 
    // Test goes here. 
} 

、私のテストでは、私が読みにくいことができ、手動で私のExamplesですべての順列を作成する必要があり、かつ潜在的にエラーが発生しやすいです。

Scenario Outline: Count things 
    Given I'm playing a game of counting 
    When I count to <number> 
    Then the highest number I should have counted to should be <number> 

    Examples: 
     | number| 
     | 1 | 
     | 2 | 
     | 3 | 
     ... 
     | 50 | 

私は本当に

Examples: 
    | number| : Range 1 to 20 

さらに良いのでしょう行うことができるようにしたいと思い何を、二組のデカルト積、すなわちを作成します。

Examples: 
    | number1| : Range 1 to 20 
    | number2| : Range 5 to 10 

// i.e. 20 x 5 = 100 combinations of the tuple (number1, number2) 

はとにかくありSpecflowでよりエレガントにこれにアプローチするために私は?

+0

あなたはhttps://github.com([CombinatorialAttribute]を使用しようとしました/ nunit/docs/wiki/Combinatorial-Attribute)と[ValueSourceAttribute](https://github.com/nunit/docs/wiki/ValueSource-Attribute)を一緒に使用していますか? –

+0

謝罪 - 私はNUnitにタグを付けてはいけませんでしたが、あなたが正しいです、私はSpecFlow(すなわちCucumber言語)から、同等の方法があるかどうかを調べることを試みています。 (NUnitのTheory、Combinatorial、TestCaseSource(生成されたデータセットを使用)など)。タグを更新しました。 – StuartLC

答えて

1

2つの入力から数値の範囲をステップとして動的に生成できます。例えば

Scenario Outline: Count things 
    Given I'm playing a game of counting 
    When I count from <First Number> to <Last Number> 
    Then the highest number I should have counted to should be <Last Number> 

    Examples: 
     | Description  | First Number| Last Number | 
     | Count from 1 to 20 | 1   | 20   | 
     | Count from 5 to 10 | 5   | 10   | 

そしてWhenステップは、このようなもののように定義することができます。

[When("I count from (\d+) to (\d+)")] 
public void ICountFromFirstNumberToLastNumber(int firstNumber, int lastNumber) 
{ 
    IEnumerable<int> numbers = Enumerable.Range(firstNumber, lastNumber); 
    this.countResult = this.Count(numbers); 
} 
0

キュウリは、このようなテストを行うために設計されていません。あなたがクッキングしているときは、それぞれのシナリオには、よく書かれた単体テストよりも1桁以上遅いランタイムがあります。したがって、多数のシナリオを生成すると、テストスイートが使用できなくなります。

キュウリはシナリオを使用していくつかの基本的なやりとりを作成し、いくつかの機能の開発を推進しています。それはテストツールではありません!

機能のいくつかの側面を徹底的にテストするには、単体テストを使用してください。

関連する問題