2016-09-05 7 views
1

私はキュウリと一緒に作りたい夢があります。キュウリタグとJUnitを使って順次テストを構成する方法は?

キュウリとセレン(< =これまでのところよく似ています)を組み合わせて、テスト実行をタグで最適化したいと考えています。私の夢の中で私はszenarioにデータベースを表すStringをタグ付けすることができます。例:

@noData 
Scenario: bake a bread 

@oneBread 
Scenario: look at bread 

@tenBreads 
Scenario: give multiple breads to the poor 

一部のテストではデータが変更されますが、一部のものでは変更されません。だから私は、私は可能であれば並列にわずかなセットアップと作業をachiveを目指し、すべての「非改変」のテストをクラスタリングについては、クラスタリングのこの種の並列

@viewOnly 
Scenario: look at a bread 

@viewOnly 
Scenario: smell a bread 

で与えられたデータにアクセスする方法を、と思いました。 => @noData

  • @noDataデータベース内

    1. セットアップSzenario:この機能はファイルで
      @noData 
      @viewOnly 
      Scenario: bake a bread 
            when i bake a bread 
            then i see a bread 
      
      @oneBread 
      @viewOnly 
      Scenario: look at a bread 
            then i see a bread 
      
      @oneBread 
      @viewOnly 
      Scenario: smell a bread 
            then i see a bread 
      
      @oneBread 
      Scenario: slice a bread in half 
            when i slice my bread 
            then i got two parts of the bread 
      
      @oneBread 
      Scenario: butter a bread 
            when i butter my bread 
            then i got one bread covered in butter 
      

      は、私は、このソリューションは、次の順序で機能を処理することを期待したいです=>シナリオ:パンを焼く

  • データベースの設定Szenario => @oneBread
  • @oneBread => @viewOnlyパンのシナリオを見

  • @oneBread => @viewOnlyシナリオが

  • パンの匂いを嗅ぐセットアップSzenarioデータベース=> @oneBread
  • @oneBread =>シナリオは半分のパンをスライスします

  • セットアップSzenarioデータベース内=> @oneBread
  • @oneBread =>シナリオバターパン

  • 私はJUnitのランナーと共演し、私の上に作成しJUnitテストを処理しようとしたら、自分の。自分のJUnitランナーをもう一度書く必要がありますか?それとも、キュウリの機能に私の要求をフルフィルさせることは可能ですか?

    誰かが私を助けることができますか?

    答えて

    1

    これは、各データベースのシナリオごとに個別のテストを実行することで可能です。そのここhttps://github.com/cucumber/cucumber/wiki/Tags#running-a-subset-of-scenarios

    私が好むもう一つの方法を、説明したように--tagsパラメータを使用するために、機能ファイルに類似したデータベースのシナリオを置くことです。たとえば、データを変更する方法のフィーチャファイルです。 @Beforeを使用して、シナリオのタグを取得します。

    @Before 
    public void beforeTest(Scenario scenario){ 
    
    } 
    

    希望があります。

    +0

    新しいシナリオタグを使用すると、私はキュウリを使ってそれをカバーする新しいテストを実装する必要がありますか? – MarcelHodan

    1

    タグが一致する場合のみ実行するフックと、ビューオンリーデータの静的フラグを設定する必要があります。 noDataの場合は、onebreadタグの場合と同様の関数を追加できます。つまり、フラグをリセットします。 oneBreadタグについてはっきりしていません。セットアップパン1つを意味します。次に、複数のパンはどうですか?ロジックを変更する必要があるでしょう。 あなたが述べたフィーチャー・ファイル・フローの下で動作するはずです。

    private static boolean dbSetupReq = true; 
    
    //Only get called if both tags are present 
    @Before(value={"oneBread","viewOnly"}) 
    public void oneBreadViewOnly() { 
    
        if(dbSetupReq) { 
          addData(); 
          dbSetupReq = false; 
        } 
    } 
    
    //Only get called if oneBread tag is present 
    @Before(value={"oneBread"}) 
    public void oneBreadViewOnly() { 
    
        dbSetupReq = true; 
        addData(); 
    } 
    
    
    public void addData() { 
        // Add logic to add data to database 
    } 
    

    あなたはこのような何かを試みることができます。常時実行され、Scenarioオブジェクトをパラメータとして取り込む、普遍的なBeforeフックを持つ。 Scenarioにあるすべてのタグにアクセスするには、getSourceTagNames()メソッドを使用して、タグ名の文字列コレクションを返します。次に、存在するタグに基づいてロジックを適用することができます。おそらく、データ設定が必要なときにBeforeフックにタグを付けて呼び出すことができます。

    @Before 
    public void dataSetup(Scenario sce) { 
    
        List<String> tags = sce.getSourceTagNames(); 
        //Do your thing with the tag names.... 
    } 
    
    +0

    新しいタグはロジックを変える結果になるでしょう。しかし、テストを抽出し、個別にソートして管理することは可能ではないでしょうか? – MarcelHodan

    +0

    答えの詳細を更新しました... – Grasshopper

    関連する問題