1

特定の のすべてのパラメータを 1 行で指定するのと、各パラメータを別の行で指定するのとではどちらがよいでしょうか? つまり、どちらが良いですか?

パラメータごとに And を分離

Scenario: some random scenario
 Given a menu with a menu width of 19 
 And quit text of "quit" 
 And Fruit options of 
  |Text|
     |some text|
     When ...
     Then ...

または特定のギブンのすべてのパラメーターを 1 行に

Scenario: Some scenario
 Given a menu with  quit text of "quit" and menu width of 19 and Fruit options of 
  |Text|
     |Some text|
    When ... 
 Then ...

これは、クラスの書き方に影響を与えるだけでなく、バ​​インディングの書き方に次のような影響を与えるように見えます (そして、私が間違っていることを願っています)。つまり、最初のオプション (パラメーターごとに別々の AND ) オブジェクトの作成後にクラスにパブリック プロパティが 1 つずつ設定されている場合、バインディングは簡単に記述できます...

private Menu _menu;
[Given(@"a menu of fruit options")]
public void GivenAMenuOfFruitOptions(Table table)
{
    string[] fruitOptions = table.GetColumn("Fruit");
    _menu = new Menu(fruitOptions,null);
}

[Given(@"a menu width of (.*)")]
public void GivenAMenuWidthOf(string width)
{
    _menu.Width = int.Parse(width);
}

[Given(@"a Quite text of ""(.*)""")]
public void GivenAMenuWidthOf(string quitText)
{
    _menu.QuitText = quitText;
}

一方、オプション 2 (すべて 1 行) では、すべてのパラメーターをコンストラクターの引数として受け取るコンストラクターを持つオブジェクトを作成する方が簡単です。

private Menu _menu;
[Given(@"a menu with  quit text of ""(.*)"" and menu width of (\d+) and Fruit options of ")]
public void GivenAMenuOfFruitOptions(string quitText, int width, Table table)
{
    string[] fruitOptions = table.GetColumn("Fruit");
    _menu = new Menu(fruitOptions,width, quitText);
}

specflow の実装は、私が書くコードに影響を与えるべきではないので、何かが欠けているように感じます。また、上記の #1 が過度にステートフルなオブジェクトを助長するのではないかと心配しています。私は機能的な無国籍中毒者です。

どんなポインタでも最も役に立ちます。

事前にt​​xs、

乾杯、アラン

4

2 に答える 2

0

完全な質問に答えるのではなく、この部分だけに答えます:

specflow の実装は、私が書くコードに影響を与えるべきではないので、何かが欠けているように感じます。また、上記の #1 が過度にステートフルなオブジェクトを助長するのではないかと心配しています。私は機能的な無国籍中毒者です。

シナリオの定式化がバインディング コードに影響することは問題ではないと思います。それがバインディングである理由です (他のフレームワークでは、これをさらに強調するために「接着剤」と呼んでいます)。適切に設計されたビジネス ロジックまたは自動化ロジックを、バインディング コードで駆動する必要があります。

機能的/ステートレス: ステップ バインディング用の組み込みチェーン オプションはありません (バインディング メソッドは、次に受け取るものを返します)。ただし、一種のステップ コンテキスト クラスを作成できます (コンテキスト インジェクションを使用: http://github.com /techtalk/SpecFlow/tree/master/Tests/FeatureTests/ContextInjection/ ) で同様の設計を実現できます。

于 2010-07-09T07:39:51.340 に答える
0

私はBDDスタイルのテストを書いており、最初の方法を使用しています...

  1. セットアップ メソッド (検証用も) は、関連するテストで再利用される可能性があります。
  2. 失敗したテストは、セットアップを含め、失敗した正確なメソッドを強調表示します。
  3. 関連するテストの重複がなくなるため、保守が容易になります。
于 2010-07-08T23:06:47.687 に答える