2011-01-03 3 views
4

はBDD(ビヘイビア駆動設計)試験は、UIドライバを使用して実装することができますか? Webアプリケーション与え例えばUIドライバ(Webアプリケーションのための、例えばセレン)を用いてBDD-試験

、代わりに:バックエンド用のテストを書く

  • 、その後、フロントエンドのためのJavaScriptでより多くのテスト

はI必要があります。

  • は、実際のブラウザでなど、マウスクリックをシミュレートするセレンマクロとしてテストを書きますか?私はこのようにそれを行う際に参照

利点は以下のとおりです。

  • のテストはかなり
  • いくつかの彼らは、開発者が を考えて取得するUI、に焦点を当てているよりも、一つの言語で書かれています外で彼らは
    • テスト異なるブラウザに私たちを可能にする実際の実行環境(ブラウザ)、で実行
    • 台の
    • テスト異なるサーバー
    • は、実世界でのパフォーマンス

思考への洞察を取得しますか?

答えて

2

WatiNでSpecFlowを使用してみてください:(私はわからないんだけど、あなたがここに.NETを使用している場合)私たちは、WPFのテストツールを使用してC#アプリケーションのためにこれをやった

http://msdn.microsoft.com/en-us/magazine/gg490346.aspx

+0

素晴らしいアイデア。私は実際にそれを検討していましたが、その後Watinは最も人気のある3つのブラウザエンジンを完全にサポートしていないため、第2の考えを持っていました。しかし、今あなたがSpecFlowを持ってきて、私はこの利点がWatinをより良い選択のように見せると思う! – Jonathan

+0

リンク+1をありがとうございます – k3b

3

WipFlash )、BDDのような方法でNUnitテストを書くことができます。

Given.TheApplicationWindowIsOpen(); 
When.I.Press.OKButton(); 
The.Price.ShouldBeCalculated(); 

言うまでもなく、多くのDSLをコードする必要がありました。しかし、それはビジネス/顧客が読めるソリューションになります。

+1

あなたがそこに行こうとしている構文が大好きです。単体テストに戻ってくるのを避けるために、ビジネス用語を使用することは非常に重要と思われます。 – Jonathan

1

Webテストでは、WebDriverを試すことができます。 Seleniumチームは現時点でWebDriverの統合に忙しいです。 GoogleからのSimon Stewartは、WebDriverを作成しました。blogged here about how it works differentlyをSeleniumに追加しました。各ブラウザごとに異なる技術を使用していますwebdriverを

。 Internet Explorerの場合、WebDriverはMicrosoftのUIオートメーションを使用しています。これは、@ Brian Agnewが述べたWipFlashと同じ技術です。これは、ボタンをクリックするようなふうに近づいています。 Simonのブログでは、このアプローチがSeleniumのJavascriptソリューションよりも強力な理由を示しています。

webdriverをセレンサイトから入手可能ですが、まだ完全にはセレンの一部として実装されていません。

0

あなたは確かにこのようにあなたの受け入れテストのいくつかを行うことができますが、私はほとんどのBDD支持者がこれをすべてのテストに使うことを勧めません。そしてもちろん、真のBDDの支持者は...テスト

The RSpec Book(主にCucumberに)最初に書かれた受け入れテスト(またはシナリオ)との擁護者2レベルのサイクルを、そして(RSpecに)書かれたユニットテストを、それらを呼び出すことはありません伝統的なTDDに似ている内部のサイクルで。

アクセプタンステストの外部サイクルでは、Seleniumのようなツールを使用してUI全体を通してアプリケーションを駆動することもできます(RSpecブックの著者はこれについて章を使います)。しかし、単体テストには適していません。

UIを使用してアプリケーション全体をテストすることは繰り返しが難しく、単体テストよりも遅くて脆い傾向があります。

+0

RSpecとキュウリはRuby用です。 .netを使用している場合は、Cucumberに似たSpecFlowを使用できます。 – k3b

1

BDDおよびユースケース駆動テストでは、テストが何をしているのかを伝えることが重要です。多くのテストスイートの問題点は、ポストライティングの誰もテストが何をしているのかがはっきりしていないことです。特殊な言語で書かないと、これは非常に頻繁に起こります。スペシャライゼーションは必ずしも特別な言語を意味するものではなく、1つの言語の抽象概念で十分であるため、何が起きているのかは明らかです。

例えば、テストの多くは(私は任意の特定のフレームワークを取得しません擬似コード)は、このようなコードを持っている:誰かがすぐに変換するため

object = createBrowser() 
response = object.gotoURL("http://someurl.com"); 
element = response.getLink("Click Here"); 
response = element.doClick(); 

これは難しいですビジネスドライバー(プロダクトマネージャー、またはユーザー)。代わりに、あなたは冒険している場合は特殊な機能、または言語を作成したい、あなたはこのことができますので:

GotoURL http://someurl.com/ 
Click link:Click Here 

セレン、およびそのマクロやインタフェースを、今でもこの点ではかなり低レベルです。あなたがそれらを使用する場合は、少なくともそれらの周りにいくつかのラッパーを構築します。

もちろん、TestPlanと呼ばれる製品を使用することもできます。バックエンドにSeleniumがあり、高度なAPIとテストのためのカスタムランゲージが公開されています。 上記のサンプル言語は、TestPlanスニペットです

0

実際には、両方を行うことができます - ユーザー中心のドライバインターフェイス(GUI/tech/implの不可知論者)。その後、UIDriverとAPIDriverを作成し、特定のテストを実行するドライバを選択することができます。 UIの実行は、通常は遅くなります(procからは、コントロールの再描画が行われますが、何らかの方法で最初は高いレベルの信頼性が得られます)。 APIの実行ははるかに高速です(proc、簡単なセットアップ - ティアダウン)。

ここでのトリックは、Whatからthe Howを分離することです。それ以外の場合は、ObscureTestsと高いテスト管理で終わります。自動化ではなく、テストに重点を置いてください。

関連する問題