web-dev-qa-db-ja.com

Java --Gherkin&Cucumber:オブジェクトまたはオブジェクトのリストを水平ではなく垂直テーブルに渡す

フィーチャーファイルに次のサンプルのガーキンシナリオがあります。

Scenario: Book an FX Trade
 Given trades with the following details are created:
   |buyCcy |sellCcy |amount   |date       |
   |EUR    |USD     |12345.67 |23-11-2017 |
   |GBP    |EUR     |67890.12 |24-11-2017 |
 When the trades are executed
 Then the trades are confirmed

私のグルーファイルでは、すぐに使えるキュウリのソリューションとして、データテーブルをオブジェクトTradeにマップできます。

@When("^trades with the following details are created:$")
public void trades_with_the_following_details_are_created(List<Trade> arg1) throws Throwable {
        //do something with arg1
}

私が達成したいこと:
次の手順を実行して、ピクルスシナリオの読みやすさを向上させます。

  • データテーブルを垂直に転置します。これにより、オブジェクトに約10個のフィールドがある場合に読みやすくなります
    • フィールド/列名をエイリアスに置き換えます

      サンプル:

      Scenario: Book an FX Trade
       Given trades with the following details are created:
         |Buy Currency  | EUR        | GBP        |
         |Sell Currency | USD        | EUR        |
         |Amount        | 12345.67   | 67890.12   |
         |Date          | 23-11-2017 | 24-11-2017 |
       When the trades are executed
       Then the trades are confirmed
      

      テーブルに2つ以上または2つ未満のデータセット/列を含めることができるように動的にする必要があります。これを達成するための最良の方法は何でしょうか?

      追加情報:
      言語:Java 8
      キュウリバージョン:1.2.5

      Trade POJOは次のようなものです:

      public class Trade {
          private String buyCcy;
          private String sellCcy;
          private String amount;
          private String date;
      
          /**
           * These fields are growing and may have around 10 or more....
           * private String tradeType;
           * private String company;
           */
      
          public Trade() {
          }
      
          /**
           * accessors here....
           */
      }
      
  • 5
    iamkenos

    テーブルが機能ファイルで次のように指定されている場合

    _|buyCcy  | EUR        | GBP        |
    |sellCcy | USD        | EUR        |
    |amount  | 12345.67   | 67890.12   |
    |date    | 23-11-2017 | 24-11-2017 |
    _

    次のグルーコードを使用できます(適切なtoString()メソッドが実装されていると仮定して、投稿されたTradeクラスで)

    _@Given("^trades with the following details are created:$")
    public void tradeWithTheFollowingDetailsAreCreated(DataTable dataTable) throws Exception {
        // transpose - transposes the table from the feature file
        // asList - creates a `List<Trade>`
        List<Trade> list = dataTable.transpose().asList(Trade.class);
        list.stream().forEach(System.out::println);
    }
    _

    出力

    _Trade{buyCcy=EUR, sellCcy=USD, amount=12345.67, date=23-11-2017}
    Trade{buyCcy=GBP, sellCcy=EUR, amount=67890.12, date=24-11-2017}
    _
    10
    SubOptimal