私は私たちのウェブサイトにいくつかのスモークテストを実装しています。
既存の自動受け入れテスト/ユーザーストーリーにGiven/When/Then形式を使用しています。しかし今、私は次の最初のスモークテストを行いたいと思います:
Given I'm on the homepage
Then I should see "Welcome To The Site"
私は何かが足りないのですか?いつなくても大丈夫ですか?
使用したツール:MVC3、SpecFlow、Nunit、Watin
私は私たちのウェブサイトにいくつかのスモークテストを実装しています。
既存の自動受け入れテスト/ユーザーストーリーにGiven/When/Then形式を使用しています。しかし今、私は次の最初のスモークテストを行いたいと思います:
Given I'm on the homepage
Then I should see "Welcome To The Site"
私は何かが足りないのですか?いつなくても大丈夫ですか?
使用したツール:MVC3、SpecFlow、Nunit、Watin
Give、When、Thenのいずれかを省略することは完全に有効な構文です(さらに、それらを任意の順序で混合することもできます-specflowは関係ありません)。
ただし、読みやすくするために、Givenを頻繁に言い換える場合は省略せずに、
When I view the homepage
Then I should see "Welcome To The Site"
いつテストされたアクションが何であるかを示すことになっているので、私は与えられたセクションを省略することを好みます。
ステップバインディングのコードが同じであり、それを再利用したい場合は、いつでも同じメソッドに指定されたものとmywhenをバインドできます。
[Given(@"I'm on the homepage"]
[When(@"I view the homepage"]
public void NavigateToHomePage()
{
...
私はあなたがここで本当にポイントを逃していると思います。常にが必要ですWhen
。それはあなたがテストすべきことです!省略できるのはGivens
あなたが言うべきことは;
When I visit the homepage
Then I should see "Welcome To The Site"
Given When Then
ステートマシンを表現するためのより良い方法です。
Given some initial state // in your case, non
When I perform some action // in your case, visiting the homepage
Then I have some final state // in your case, text displayed to a user
私がやりたいのは、それWhen
を実現するために存在しなければならないすべてのことについて考えることです。あなたの場合、初期状態はないようです。ただし、Webアプリケーションがあるかどうかを検討してください。ホームページにアクセスする前に初期状態にする必要があります(ユーザーがログインしていることを確認する必要があります)。
Given a user // user must be stored in the database
And the user is logged in // a logged in user must be in the session
When the user visits their homepage
Then the user should see "Welcome To Your Homepage"
別のシナリオは次のようになります。
Given no logged in user // some people would leave this Given out, but I add it for completness
When a user visits their homepage
Then the user should be redirect to the login page
誰かが正しく指摘したように、ほとんどのBDDツールは実際には区別されませんGiven When Then
が、そうする必要があります。「GivenWhenThen」の冗長な性質は、私たち人間が理解しやすく、思考プロセスを支援するために選択されました。マシンは、あなたがステップと呼ぶものをあまり気にすることができませんでした。この場合、キーワードを常に正しく使用するようにあらゆる努力を払う必要があります。
BDDの構造は、アレンジ、アクト、アサーションを使用した適切に設定されたテストと同じです。
ただし、BDDの利点は、テストに詳細な構造を与えることです。これは、開発者が製品所有者とドメインに適した会話をするのに役立ちます-ビヘイビア駆動開発。
これらの会話がない場合は、通常のテスト手法よりもBDDを使用する価値はほとんどありません。
私はGivenを従来の前提条件と同等のものと見なす傾向があります。テストアクションと同等の場合。そして、期待される結果と同等のものとして。
したがって、前提条件がない場合は、Givenを省略し、WhenとThenに焦点を当てます。
When I'm on the homepage
Then I should see "Welcome To The Site"
SpecflowではGivenまたはWhenを使用できますが、Visual Studioでは、数千行の長さの単一のクラスを作成することもできます。両方が可能であるという理由だけで、どちらかが「正しい」という意味ではありません。
スレッド復活のお詫び...
私はおそらく一緒に行ったでしょう:
Given there is a homepage
When I view the homepage
Then I should see "Welcome To The Site"
私は少なくとも1つを保持するのが好きでGiven
、When
それぞれThen
にScenario
-も使用できることを忘れないAnd
でくださいBut
(これらがこのシナリオに特に関連しているわけではありません)。を使用して箇条書きのスタイルリストを作成することもできます*
。
私は言うだろう:
Given I have requested the home page
When the home page loads
Then I should see 'Welcome To The Site'
いつも必要ありません。私はGiven/When/Thenキーワードのような考えが好きです
与えられた-これは準備ステップです。テストを実行できるようにするために必要なことは何でもしてください。-これは、テストで検証されるアクションである必要があります。次に-これは、Whenステップで実行されたアクションに基づいてテストを検証する場所です。
以前の提案のように、それらは実行順序にのみ影響します。