2010-11-19 13 views
0

は一例ですeasybウェブサイトからeasybのシナリオ:easybのGroovyを英語のシナリオ定義と分けることは可能ですか?ここで

before "start selenium", { 
given "selenium is up and running", { 
    selenium = new DefaultSelenium("localhost", 
    4444, "*firefox", "http://acme.racing.net/greport") 
    selenium.start() 
} 
} 

scenario "a valid person has been entered", { 

when "filling out the person form with a first and last name", { 
    selenium.open("http://acme.racing.net/greport/personracereport.html") 
    selenium.type("fname", "Britney") 
    selenium.type("lname", "Smith") 
} 

and "the submit link has been clicked", { 
    selenium.click("submit") 
} 

then "the report should have a list of races for that person", { 
    selenium.waitForPageToLoad("5000") 
    values = ["Mclean 1/2 Marathon", "Reston 5K", "Herndon 10K", "Leesburg 10K"] 
    for(i in 0..<values.size()){ 
    selenium.getText("//table//tr[${(i+3)}]/td").shouldBeEqualTo values[i] 
    } 
} 
} 

after "stop selenium" , { 
then "selenium should be shutdown", { 
    selenium.stop() 
} 
} 

は、それはより多くのこのような何かを提示するために、英語からのGroovyを分離することが可能である:

scenario "a valid person has been entered" 
    given "the website is running" 
    when "filling out the person form with a first and last name" 
    and "the submit link has been clicked" 
    then "the report should have a list of races for that person" 

私のPHBが「勝ったその方法中括弧とGroovyがすべて混乱します。

答えて

1

おそらく正当な努力ではありません。それにもかかわらず、外部でコードクロージャを簡単に定義できます。 「人間が読める」の部分は次のようになります。

scenario "a valid person has been entered", { 
    when "filling out the person form with a first and last name", 
     fillOutPersonForm 
    and "the submit link has been clicked", 
     clickSubmitLink 
    then "the report should have a list of races for that person", 
     checkRacesList 
} 

は閉鎖名が記述と自己文書化されていることを確認してください。

def fillOutPersonForm = { 
    selenium.open("http://acme.racing.net/greport/personracereport.html") 
    selenium.type("fname", "Britney") 
    selenium.type("lname", "Smith") 
} 
+0

これになるかもしれないと思いました。少なくともこのようにして、さまざまなシナリオ間でコードを再利用することができます。ここでメソッドの代わりにクロージャを使用するのは面白いですか?記述的なクロージャー/メソッド名が読みやすくなっていれば、完全に書かれた説明の要点は何ですか? – Armand

+0

ここでは、クロージャーインスタンスが引数としてEasyBメソッドに渡されるため、メソッドを使用することはできません。それは(実際に)方法で行うことはできません。それは両者の最も重要な違いです。 - テキスト記述に関しては、それらの周囲のステートメントはコードボディなしで実行することができます。さらに、非プログラマは、表現的なクロージャ/メソッド名を書く感覚がないかもしれません。詳細な回答をいただきありがとうございます。 – robbbert

1

は実は、私は、これはすでにANT経由easybの特徴であると信じて:実は、私は、クロージャの定義がそのように定義されていました...完全に書かれた記述よりも読みやすく、それらを見つける

統合。 http://www.easyb.org/running.htmlの「ストーリー印刷」のセクションをご覧ください。

1

SJG'sanswerの拡張子は、プログラムでこれを行うコードスニペットです。

easyb documentation at http://www.easyb.org/running.htmlは、コマンドラインから 'Story'テキストビューを作成する方法についてのみ説明しています。それはあなたが2番目のパラメータとして-htmlまたは-xmlを使用してHTMLレポート作成とXMLの報告のために同様のアプローチを使用することができます

import org.easyb.BehaviorRunner 

def params=["C:/temp/teststory.story", "-txtstory", "C:/temp/testoutput.html"] as String[] 
BehaviorRunner.main(params) 

... Groovyのコードでこれを行うには簡単な作業です。

テストを実行せずにレポートを作成できるようにするために、どのパラメータが必要なのかまだ分かりません。これは可能でなければなりません。issue 165 fixedを参照してください。これをストーリーの最後の部分として追加して、 'user'ドキュメントが常に作成されるようにしてください。上記のスニペットはテストを実行させます。それ以外の場合、再帰的なループに入ります。

+0

私が正しく理解していれば、シナリオテキストを表示することはできますが、コードを見ずに編集することはできません。あれは正しいですか? – Armand

+0

@Alisonはい、これはコード+シナリオテキストからシナリオテキストだけへの一方向変換です。あなたが上記のRobbbertの[answer](http://stackoverflow.com/questions/4224168/is-it-possible-to-separate-easybs-groovy-from-plain-english-scenario-definitions/4226086#4226086)を使用した場合、クロージャーでテクニカルテストコードを分割すると、メインのシナリオテキストは開発者以外の人が読むことができます。 – Chris

関連する問題