2017-07-29 4 views
2

私は最初からWebアプリケーションを作成するのに自信を持ってペットプロジェクトを始めたいと思います。私はBDDとTDDを使いたいと思います。 「成長するオブジェクト指向ソフトウェア:テストによるガイド」を読んで、システム全体の中で歩くスケルトンを持つことができるシステムの最も薄い部分から始めて、すばやくフィードバックして生産/展開手順BDDを使用してゼロからWebアプリケーションを作成する方法は?

BDDで受諾テストを作成した後は、ユニットテストなどの細かい粒度テストに移行します。

Webアプリケーションはあなたに似ているスーパーヒーローを見つけることについてですが、私のようなBDDのシナリオを書くだろうと想像:私たちに焦点を当てることができますので、私は意図的に認証を無視してい

When I insert my information 
Then the system should tell that the superhero I'm more similar to is "Batman" 

システムの主な機能このシナリオでは、上記のシナリオをエンドツーエンドで自動的に複製できるように、有効なインフラストラクチャがあると想定しています。

異なるレイヤー(Webサーバー、アプリケーションサーバー、およびデータベース)でWebアプリケーションをレイアウトしたいと仮定して、このテストをどのように実装できますか? ユーザーをシミュレートするためにSelenium WebDriverを使用したい場合は、どのレイヤーを偽装し、最初にどのレイヤーをテストする必要がありますか? 私はまた、APIのテストから始めることを考えましたが、それはエンドツーエンドのテストではありませんでしたが、アプリケーションを部分的にしかテストしませんでした。

答えて

1

キュウリはBDDの良いフレームワークです。 UI/Seleniumテストはちょっとばかげているかもしれませんので、私はそれらをあまり推奨しません(Testing Pyramidを参照)。 個人的には、初心者向けに提案したようにAPIレベルで作業すると思いますが、UIとアプリケーションを分離しました。

高レベルの機能を説明する、APIレベルでアプリケーション(BDD)のいくつかのキュウリ統合テストを記述します。私はこのレベルでは、あなたがこの時点で働いているアプリケーション全体を見たいと思うので、嘲笑しません。

これらを実装するには、TDDを使用します。ここでは、ファイルIO /データベースのような外観を模倣したいと思うでしょう。すべてのTDD単体テストが完了したら、全体的なフィーチャが通過します。すべての機能が完了するまで続けます。

このように続行すれば、単体テストとAPIレベルでの統合(フィーチャ)テストの確実なセットが得られます。

「ハッピーデイ」シナリオセレンテストを使用してUIを開始すると(実際には垂直スライスを取得すると同時に)、UIコードが実際にテストする必要があります。メインアプリはすでに十分にテストされています。

ちょうど私の見解 - それは助けてくれるでしょう。

+0

APIテストと同じシナリオを使用しますか? – acejazz

+0

効果的です。 APIは、統合テストと単体テストを使用してテストされます。追加のUIテストは、システムレベルで行われた場合にもAPIに触れるでしょう – MikeJ

0

私はCucumberを使っていますが(私はひどく偏っています)、アプリケーションの中核部分についていくつかのシナリオを書くことから始めます。

あなたのシナリオを書くときに、あなたのドメイン言語

  • のみ、あなたがやってWHY
  • その重要なのは、あなたが物事を行う方法についての話をしないでくださいしているかについて話使用

    1. に従うようにいくつかの重要なルール。

    スーパーヒーローサイトでは、開始するために必要なことを考え始めることができます。

    あなたは、リソース(スーパーヒーロー)を発見したとき、一般的に、あなたが探索することができますいくつかの基本的なCRUD操作を持っていますので、

    • COMPARINGスーパーヒーロー
    • を削除するスーパーヒーロー
    • を編集するスーパーヒーロー
    • を作成しますスーパーヒーロー**これはあなたの重要な出発点です** **

    今スーパーヒーローのシナリオ

    Given there are superheroes Batman and Superman And I am like Batman When I find my superhero Then I should see I am like Batman

    を比較すると、このシナリオの実装を開始することができます。ここで重要なことの1つは、すべてのコードをステップ定義に入れないことです。代わりに、各ステップ定義をヘルパーメソッドの呼び出しにします。

    注:すべての次のコードは、ルビーになります

    Given 'there are superheroes Batman and Superman' do create_superhero batman create_superhero superman end

    そして今、我々は、BDDの赤/緑のテストサイクルに入ることができます。

    No method found create_superheroundefined constant batmanのようなエラーが発生します。ステップ定義ではヘルパーモジュールを使用してこれらの問題を解決できます。

    module CreateSuperHeroStepHelper 
        def create_superhero(attrs={}) 
        Superhero.create(attrs) 
        end 
    
        def batman 
        { 
         ... 
        } 
        end 
    
        ... 
    
    end 
    

    このコードから、アプリケーションのドメインオブジェクトの作業を開始できます。スーパーヒーロー。

    この手順を実行するには、基礎となるWebフレームワークとやり取りする必要があります。一度作業したら、最も基本的なフォームで次のステップに進むことができます。

    途中で、次に行うことについてさまざまな選択肢があります。このコアシナリオの作業に固執すれば、あなたは物事をどのように実装するかについて巧みにしなければなりません。あなたが前提条件のように見えるシナリオに取り組むことに決めた場合。スーパーヒーローを作成し、スーパーヒーロー特性を入力し、スーパーヒーロー特性を追加します。次に、コアシナリオで使用できるツール(たとえば、create_superhero)を使用できるツールにする必要がありますが、アプリケーションのコアに到達するまでに時間がかかります。

    ここでユニットテスト、レイヤーまたはモックを考える必要はありません。あなたが後になることをどうやって行うのかについての低レベルの詳細です。あなたのWebフレームワークに基本的な能力を持っている限り、ドメインを探索し、BDDを使用してスーパーヒーローの世界を探索するための簡単なツールを作成する必要があります。

    幸運

  • +0

    私はこれを得て、本当に答えに感謝します。しかし、私の質問は具体的にはWebアプリケーションについてです。私はそれがテストの適用範囲、その安定性(エンド・ツー・エンド・シナリオは少しフレークである)とテストが通過するレイヤーとのトレードオフだと思います。 – acejazz

    +1

    答えはウェブアプリケーションに適用されます(私が最近書いたものすべて)。 BDDはテストのことではなく、行動を発見し、開発を促進することです。つまり、カバレッジと実装について考える前に、それをやり直さなければなりません。あなたが行動を発見しているときは、相互作用から始めるべきです(シナリオではいつ)。 Webアプリケーションでは、これはユーザーとブラウザ(主に)とのやり取りです。したがって、あなたの「いつ」はブラウザを使用するべきです。あなたのGivensはより柔軟になり、状態を設定しているときにブラウザをバイパスすることができます。 – diabolist

    関連する問題