SlideShare ist ein Scribd-Unternehmen logo
1 von 95
Downloaden Sie, um offline zu lesen
今日から始める
                                BDD
                           (Symfony2編)

                 日本Symfonyユーザー会 後藤 秀宣(@hidenorigoto)



Symfony2 x BDD
内容(予定)
    ●
        TDD、BDDとは
    ●
        Behatの特徴
    ●
        Behat環境の構築方法(Symfony2)
    ●
        Behatの使い方
    ●
        応用




Symfony2 x BDD
 


                 Webアプリケーションの

    テスト駆動開発
                    入門の話


Symfony2 x BDD
質問




       テスト書いてますか?



Symfony2 x BDD
 




                 ご安心ください


Symfony2 x BDD
テストを書いていない人




                 めんどくさい
                 テストの書き方が分か
                 らない
                 開発プロセスにまで適
                 用できない




Symfony2 x BDD
テストを書いていない人

                 後藤の勝手なイメージ




                 めんどくさい
                 テストの書き方が分か
                 らない
                 開発プロセスにまで適
                 用できない




Symfony2 x BDD
 




                 ご安心ください
                     この講演を聞くと
                   テストファーストな開発を
                      始められます!
                        (多分)




Symfony2 x BDD
 



                  ところで
                 「テスト」とは


Symfony2 x BDD
 


                 テスト駆動開発のテスト

                     ≠

       ソフトウェア品質テストのテスト


Symfony2 x BDD
 


                 テスト駆動開発のテスト

    開発手法の視点
                     ≠   品質保証の視点

       ソフトウェア品質テストのテスト


Symfony2 x BDD
 
    ●   TDDについて、もっと体系的に知りたい方は




Symfony2 x BDD
●
        原書はこちら




Symfony2 x BDD
Behatを使うと




Symfony2 x BDD
Behatを使うと
    ●
        自然言語に近い構文
        →英語が分からなくても書ける




Symfony2 x BDD
Behatを使うと
    ●
        自然言語に近い構文
        →英語が分からなくても書ける


    ●
        組み込みステップ
        →Webテスト系をスムーズに記述可能




Symfony2 x BDD
Behatを使うと
    ●
        自然言語に近い構文
        →英語が分からなくても書ける


    ●
        組み込みステップ
        →Webテスト系をスムーズに記述可能


    ●
        テストの内容が分かりやすい
        →テストのメンテナンス性




Symfony2 x BDD
Behatを使うと
    ●
        自然言語に近い構文
        →英語が分からなくても書ける


    ●
        組み込みステップ
        →Webテスト系をスムーズに記述可能


    ●
        テストの内容が分かりやすい
        →テストのメンテナンス性
                             ハードルが
                               低い



Symfony2 x BDD
 




                 BDDについて



Symfony2 x BDD
BDDについて




Symfony2 x BDD
BDDについて
    ●
        振舞駆動開発




Symfony2 x BDD
BDDについて
    ●
        振舞駆動開発
    ●   PHPUnit等でもBDDはできる




Symfony2 x BDD
BDDについて
    ●
        振舞駆動開発
    ●   PHPUnit等でもBDDはできる
    ●   BehatのBDDは「シナリオBDD」
         →違いは・・・・?




Symfony2 x BDD
PHPUnit vs Behat(Gherkin)
   PHPUnit




    PHPUnitマニュアル 第13章 振舞駆動開発 ボウリングゲームの例



Symfony2 x BDD
PHPUnit vs Behat(Gherkin)
   Behat




Symfony2 x BDD
BDDについて
    ●
        振舞駆動開発
    ●   PHPUnit等でもBDDはできる
    ●   BehatのBDDは「シナリオBDD」
         →違いは・・・・?




Symfony2 x BDD
BDDについて
    ●
        振舞駆動開発
    ●   PHPUnit等でもBDDはできる
    ●   BehatのBDDは「シナリオBDD」
         →違いは・・・・?

        読みやすいDSLによるテストの記述と実行




Symfony2 x BDD
BDDについて
    ●
        振舞駆動開発
    ●   PHPUnit等でもBDDはできる
    ●   BehatのBDDは「シナリオBDD」
         →違いは・・・・?

        読みやすいDSLによるテストの記述と実行


                 ユビキタス言語(DDD)との親和性


Symfony2 x BDD
 




                 Behatについて


Symfony2 x BDD
Behatとは
    ●
        BDDフレームワーク for PHP




Symfony2 x BDD
Symfony2 x BDD
Behatとは
    ●
        BDDフレームワーク for PHP
    ●
        Cucumber(Ruby)互換DSL (Gherkin)




Symfony2 x BDD
Behatとは
    ●
        BDDフレームワーク for PHP
    ●
        Cucumber(Ruby)互換DSL (Gherkin)
    ●
        Symfony2のコンポーネントを使って実装




Symfony2 x BDD
Behatとは
    ●
        BDDフレームワーク for PHP
    ●
        Cucumber(Ruby)互換DSL (Gherkin)
    ●
        Symfony2のコンポーネントを使って実装
    ●
        Symfony2と統合しやすい(BehatBundle)




Symfony2 x BDD
Behatとは
    ●
        BDDフレームワーク for PHP
    ●
        Cucumber(Ruby)互換DSL (Gherkin)
    ●
        Symfony2のコンポーネントを使って実装
    ●
        Symfony2と統合しやすい(BehatBundle)
    ●
        Symfony2以外のフレームワークのテストにも利用可能
         symfony 1.4(sfBrowser)
         他(Goutte/Sahi ドライバ)




Symfony2 x BDD
BehatBundleを使うと


                  (そこそこ)手軽に

                 シナリオBDDを
                 始められます!


Symfony2 x BDD
 


                    ここから
                   Symfony2で
                 Behatの使い方

Symfony2 x BDD
インストール手順
    ●
        Gistにまとめてあります

        https://gist.github.com/997514

    ●
        めんどくさい方は、knpIpsumで持ってくる

        http://bit.ly/sf2-knpipsum



Symfony2 x BDD
Behat環境の準備(1)
    ●
        最初にPHPUnit環境を準備



    ●
        インストールされていなければ




                 インストールされたディレクトリを確認しておくこと


Symfony2 x BDD
Behat環境の準備(2)
    ●
        Symfony2プロジェクトに以下を組み込む

        Behat         https://github.com/Behat/Behat
        Gherkin       https://github.com/Behat/Gherkin
        Mink          https://github.com/Behat/Mink
        BehatBundle   https://github.com/Behat/BehatBundle
        MinkBundle    https://github.com/Behat/MinkBundle




Symfony2 x BDD
Behat環境の準備(2)
    ●
        Symfony2プロジェクトに以下を組み込む

        Behat         https://github.com/Behat/Behat
        Gherkin       https://github.com/Behat/Gherkin
        Mink          https://github.com/Behat/Mink
        BehatBundle   https://github.com/Behat/BehatBundle
        MinkBundle    https://github.com/Behat/MinkBundle




            慣れてない方には超ハードル


Symfony2 x BDD
Behat環境の準備(2)- 2
    ●
        BETA2あたりからdepsファイルを使ったvendors
        指定に変わった

        →組み込みたいライブラリのリポジトリを
         bin/depsファイルに書く

        →$ php bin/vendors.php




Symfony2 x BDD
Behat環境の準備(3)
    ●
        autoload.php
         注:PHPUnitがインクルードパスにない
           場合は追加しておく
    ●
        AppKernel.php
         バンドルを登録
         PHPUnit用require
    ●
        config_dev.yml
         framework
          test: ~
         behat_mink
          start_url: ~



Symfony2 x BDD
Behat環境の準備(4)
    ●
        Symfony2コンソールの一覧にbehatが出る




Symfony2 x BDD
Behat環境の準備(5)
    ●
        動作確認:テスト用のバンドルを初期化




                       AcmeTestBundleは
                         あらかじめ作成
                         されていること




Symfony2 x BDD
 


                  Behatで
                 テストを書く
                  基礎知識

Symfony2 x BDD
用語
    ●
        フィーチャ
    ●
        シナリオ
    ●
        ステップ
    ●
        前提(Given) もし(When) ならば(Then)
    ●
        Gherkin
    ●
        Mink
    ●
        Sahi



Symfony2 x BDD
フィーチャ
    ●
        アプリケーションの機能ごとの単位
    ●
        粒度は自由に決める
        (モジュール単位、画面単位、チケット単位)
    ●
        Behatでは、1つのフィーチャファイル
        (拡張子 feature)
    ●
        Feature(フィーチャ): に続けて記述




Symfony2 x BDD
シナリオ
    ●
        特定のフィーチャの振舞を表現するシナリオ
    ●
        Scenario(シナリオ): に続けて記述
    ●
        1つのフィーチャには、複数のシナリオを記述
        できる




Symfony2 x BDD
ステップ
    ●
        1つのシナリオには、複数のステップを記述で
        きる
    ●
        Given(前提)、When(もし)、Then(なら
        ば)に続けて記述
    ●
        Webテスト向けの組み込みステップがある




Symfony2 x BDD
Gherkin(ガーキン)
    ●
        Cucumber互換DSLの名前




Symfony2 x BDD
Mink
    ●
        テストドライバー抽象化ライブラリ
    ●
        ドライバー抽象化レイヤーを設けることで、
        (ほぼ)同じテストコードを使って、Symfony
        内部でのテストとWebブラウザを使ったテスト
        の両方をサポート
    ●
        SymfonyDriver → 内部呼び出しでテスト
        GoutteDriver  → HTTP経由呼び出し
        SahiDriver   → FireFoxでテスト



Symfony2 x BDD
Sahi
    ●
        Seleniumみたいなヤツ
    ●
        http://sahi.co.in/w/sahi




Symfony2 x BDD
 



                 フィーチャファイルの
                    書き方



Symfony2 x BDD
フィーチャファイル




Symfony2 x BDD
フィーチャファイル
                 フィーチャ




Symfony2 x BDD
フィーチャファイル
                 シナリオ




Symfony2 x BDD
フィーチャファイル




                 ステップ(前提)



Symfony2 x BDD
フィーチャファイル




                 ステップ(条件)



Symfony2 x BDD
フィーチャファイル




                 ステップ(期待する結果)


Symfony2 x BDD
フィーチャファイル




      先頭にlanguageを指定すれば、日本語キーワードに対応


Symfony2 x BDD
フィーチャファイル




Symfony2 x BDD
フィーチャファイル
    ●
        フィーチャファイルは、バンドルのFeatures
        ディレクトリ直下に作成する
        「test.feature」など




Symfony2 x BDD
 




                 テストを実行してみる




Symfony2 x BDD
Behatでのテスト実行
    ●
        Behat:test:bundle バンドル名




Symfony2 x BDD
Behatでのテスト実行
    ●
        Behat:test:bundle バンドル名




                                  シナリオ実行




Symfony2 x BDD
Behatでのテスト実行
    ●
        Behat:test:bundle バンドル名




                                  実行結果




Symfony2 x BDD
Behatでのテスト実行
    ●
        Behat:test:bundle バンドル名




                              この辺注目




Symfony2 x BDD
 




           ステップの実行の仕組み




Symfony2 x BDD
ステップの種類
    ●
        組み込みステップ
        最初から使えるステップ
        フィーチャファイルに記述するだけで使える

    ●
        カスタムステップ
        組み込みステップにない独自のルール
        フィーチャファイルに自由な文章で記述し、対応する
        コードをステップファイルに記述




Symfony2 x BDD
組み込みステップの一覧
   behat:test:bundle --steps バンドル




Symfony2 x BDD
組み込みステップの一覧
   behat:test:bundle --steps --lang=ja バンドル




Symfony2 x BDD
組み込みステップの一覧

                 重要

   ステップの一覧(=レシピ)を見なが
   ら、ざっくりとしたシナリオを記述し
   ていける
   (Webアプリケーションの場合)



Symfony2 x BDD
組み込みステップの一覧

                    重要

   ステップの一覧(=レシピ)を見なが
   ら、ざっくりとしたシナリオを記述し
   ていける
   (Webアプリケーションの場合)

             テストコードを書く心理ハードルが低い

Symfony2 x BDD
組み込みステップの場所
    ●
        Mink内
        src/Behat/Mink/Integration/step/
         mink_steps.php

        中をのぞいてみましょう




Symfony2 x BDD
組み込みステップのコード




Symfony2 x BDD
組み込みステップのコード




                 ステップ(正規表現)




Symfony2 x BDD
組み込みステップのコード




                 ステップのPHPテストコード




Symfony2 x BDD
組み込みステップのコード
    ●
        カスタムステップを実装する際にレシピがわり
        になります




Symfony2 x BDD
カスタムステップ
    ●
        カスタムステップは、
        Features/steps/steps.php
        に記述する。

    ●
        フィーチャファイルにカスタムステップを記述
        してbehatコマンドを実行すると、未実装のカ
        スタムステップの雛形が表示される。
        (先ほど見た画面)




Symfony2 x BDD
カスタムステップ




Symfony2 x BDD
カスタムステップ




                 steps.phpへコピペ




Symfony2 x BDD
カスタムステップ
    ●
        ステップがpendingになる




    ●
        あとはステップのコードを書くだけ




Symfony2 x BDD
カスタムステップ
    ●
        ステップメソッド内は結構何でもできる




Symfony2 x BDD
テストの書き方は
                    分かった。
                 早くテストファースト
                 について教えてくれ




Symfony2 x BDD
後は

             開発のサイクルに乗せるだけ

                    +


                 慣 れ ろ !

Symfony2 x BDD
テストファーストに持っていく
    ●
        まずはテストを書くことに慣れる
    ●
        たとえばechoデバッグを、テストコードで行う




Symfony2 x BDD
 




      http://www.phpunit.de/manual/3.6/ja/writing-tests-for-phpunit.html




Symfony2 x BDD
テストファーストに持っていく
    ●
        まずはテストを書くことに慣れる
    ●
        たとえばechoデバッグを、テストコードで行う




Symfony2 x BDD
テストファーストに持っていく
    ●
        コード→テスト→コード→テスト・・・




Symfony2 x BDD
テストファーストに持っていく

    ●
        コード→テスト→コード→テスト・・・

                   このループに慣れれば、
                 自然とテストを書きたくなります




Symfony2 x BDD
 




                 おまけ



Symfony2 x BDD
Behat応用(1)
    ●
        DDD(MDD)
        ユビキタス言語(DDD参照)を使い、ドメイン
        モデルのフィーチャ、シナリオ、ステップを記
        述

        →ドメインエキスパートにもメンテナンスでき
        る(可能性)
        →前提・もし・ならば、の制限を外すように
        DSLを拡張する(「・」など)



Symfony2 x BDD
Behat応用(2)
    ●   ITS(Redmine)、Gitのブランチ、コミット等
        も含めたワークフロー

        →Behat関係あるの?
        →ブランチの実装内容に対するテストコード、
        フィーチャ、シナリオが一体となってGitリポジ
        トリで管理可能
        →特にバグ修正の際に、ITSのチケットにいろ
        いろ書くのではなく、バグ修正用フィーチャに
        説明などを書くようにする




Symfony2 x BDD
 



         是非Behatを
       使ってみてください!


Symfony2 x BDD

Weitere ähnliche Inhalte

Was ist angesagt?

20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuriYoshifumi Yamaguchi
 
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームVivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームmarsee101
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)marsee101
 
Vivado hls勉強会3(axi4 lite slave)
Vivado hls勉強会3(axi4 lite slave)Vivado hls勉強会3(axi4 lite slave)
Vivado hls勉強会3(axi4 lite slave)marsee101
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること信之 岩永
 
Zynq + Vivado HLS入門
Zynq + Vivado HLS入門Zynq + Vivado HLS入門
Zynq + Vivado HLS入門narusugimoto
 
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応marsee101
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京hecomi
 
Trema day#4 Pio盛り ~Tremaのパケットパーサ~
Trema day#4 Pio盛り ~Tremaのパケットパーサ~Trema day#4 Pio盛り ~Tremaのパケットパーサ~
Trema day#4 Pio盛り ~Tremaのパケットパーサ~エイシュン コンドウ
 
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくするKouhei Sutou
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方Shigenori Sagawa
 
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)Kei Nakazawa
 
レビューで保守性のためにした コメントをふりかえってみた
レビューで保守性のためにした コメントをふりかえってみたレビューで保守性のためにした コメントをふりかえってみた
レビューで保守性のためにした コメントをふりかえってみたTakhisa Hirokawa
 
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」marsee101
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone teradaManabu Terada
 

Was ist angesagt? (19)

広がる .Net
広がる .Net広がる .Net
広がる .Net
 
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri
 
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームVivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリーム
 
進化するArt
進化するArt進化するArt
進化するArt
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)
 
Vivado hls勉強会3(axi4 lite slave)
Vivado hls勉強会3(axi4 lite slave)Vivado hls勉強会3(axi4 lite slave)
Vivado hls勉強会3(axi4 lite slave)
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
 
Zynq + Vivado HLS入門
Zynq + Vivado HLS入門Zynq + Vivado HLS入門
Zynq + Vivado HLS入門
 
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 
Trema day#4 Pio盛り ~Tremaのパケットパーサ~
Trema day#4 Pio盛り ~Tremaのパケットパーサ~Trema day#4 Pio盛り ~Tremaのパケットパーサ~
Trema day#4 Pio盛り ~Tremaのパケットパーサ~
 
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
 
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
 
レビューで保守性のためにした コメントをふりかえってみた
レビューで保守性のためにした コメントをふりかえってみたレビューで保守性のためにした コメントをふりかえってみた
レビューで保守性のためにした コメントをふりかえってみた
 
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone terada
 

Andere mochten auch

第4回Symfony2勉強会 基礎編ワークショップ.1
第4回Symfony2勉強会 基礎編ワークショップ.1第4回Symfony2勉強会 基礎編ワークショップ.1
第4回Symfony2勉強会 基礎編ワークショップ.1Yusuke Ueno
 
第4回Symfony2勉強会 基礎編ワークショップ.0
第4回Symfony2勉強会 基礎編ワークショップ.0第4回Symfony2勉強会 基礎編ワークショップ.0
第4回Symfony2勉強会 基礎編ワークショップ.0Yusuke Ueno
 
Symfony2のフォームフレームワーク
Symfony2のフォームフレームワークSymfony2のフォームフレームワーク
Symfony2のフォームフレームワークKatsuhiro Ogawa
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにAtsuhiro Kubo
 
Twigエクステンションの作り方
Twigエクステンションの作り方Twigエクステンションの作り方
Twigエクステンションの作り方Katsuhiro Ogawa
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ VOYAGE GROUP
 
オレオレSecurityバンドル作っちゃいました
オレオレSecurityバンドル作っちゃいましたオレオレSecurityバンドル作っちゃいました
オレオレSecurityバンドル作っちゃいましたKatsuhiro Ogawa
 
Symfony勉強会#9 form
Symfony勉強会#9 formSymfony勉強会#9 form
Symfony勉強会#9 formYuichi Okada
 

Andere mochten auch (11)

第4回Symfony2勉強会 基礎編ワークショップ.1
第4回Symfony2勉強会 基礎編ワークショップ.1第4回Symfony2勉強会 基礎編ワークショップ.1
第4回Symfony2勉強会 基礎編ワークショップ.1
 
第4回Symfony2勉強会 基礎編ワークショップ.0
第4回Symfony2勉強会 基礎編ワークショップ.0第4回Symfony2勉強会 基礎編ワークショップ.0
第4回Symfony2勉強会 基礎編ワークショップ.0
 
Symfony2のフォームフレームワーク
Symfony2のフォームフレームワークSymfony2のフォームフレームワーク
Symfony2のフォームフレームワーク
 
Silex 入門
Silex 入門Silex 入門
Silex 入門
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
 
Twigエクステンションの作り方
Twigエクステンションの作り方Twigエクステンションの作り方
Twigエクステンションの作り方
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
 
オレオレSecurityバンドル作っちゃいました
オレオレSecurityバンドル作っちゃいましたオレオレSecurityバンドル作っちゃいました
オレオレSecurityバンドル作っちゃいました
 
Symfony勉強会#9 form
Symfony勉強会#9 formSymfony勉強会#9 form
Symfony勉強会#9 form
 
Silex入門
Silex入門Silex入門
Silex入門
 
Composer 再入門
Composer 再入門Composer 再入門
Composer 再入門
 

Ähnlich wie Symfony2 Behat/BDD (#Symfony2study 4)

Symfony2 intro-20111204
Symfony2 intro-20111204Symfony2 intro-20111204
Symfony2 intro-20111204Hidenori Goto
 
Houdini 製品概要
Houdini 製品概要 Houdini 製品概要
Houdini 製品概要 Ken Taki
 
Monomeeting 20081022
Monomeeting 20081022Monomeeting 20081022
Monomeeting 20081022Atsushi Eno
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成Izumi Tsutsui
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門晃 遠山
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaHidenori Goto
 
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Mr. Vengineer
 
秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えてYuta Ogura
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成shigeki_ohtsu
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2Tomofumi Yagi
 
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングmbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングKiwamu Okabe
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATETomofumi Yagi
 
Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1Hidenori Goto
 
リーダブルコードを読んだ後
リーダブルコードを読んだ後リーダブルコードを読んだ後
リーダブルコードを読んだ後Kouhei Sutou
 
Al mininum 47redmine-2nd
Al mininum 47redmine-2ndAl mininum 47redmine-2nd
Al mininum 47redmine-2ndmikoto20000
 
Xilinx SDSoC(2016.3)解体新書ソフトウェア編
Xilinx SDSoC(2016.3)解体新書ソフトウェア編Xilinx SDSoC(2016.3)解体新書ソフトウェア編
Xilinx SDSoC(2016.3)解体新書ソフトウェア編Mr. Vengineer
 

Ähnlich wie Symfony2 Behat/BDD (#Symfony2study 4) (20)

Symfony2 behat-bdd
Symfony2 behat-bddSymfony2 behat-bdd
Symfony2 behat-bdd
 
Symfony2 intro-20111204
Symfony2 intro-20111204Symfony2 intro-20111204
Symfony2 intro-20111204
 
Houdini 製品概要
Houdini 製品概要 Houdini 製品概要
Houdini 製品概要
 
Monomeeting 20081022
Monomeeting 20081022Monomeeting 20081022
Monomeeting 20081022
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
 
Symfony2#5 LT
Symfony2#5 LTSymfony2#5 LT
Symfony2#5 LT
 
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
 
ZendStudioのご紹介
ZendStudioのご紹介ZendStudioのご紹介
ZendStudioのご紹介
 
秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
Golang tokyo #7 qtpm
Golang tokyo #7 qtpmGolang tokyo #7 qtpm
Golang tokyo #7 qtpm
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2
 
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングmbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミング
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATE
 
Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1
 
リーダブルコードを読んだ後
リーダブルコードを読んだ後リーダブルコードを読んだ後
リーダブルコードを読んだ後
 
Al mininum 47redmine-2nd
Al mininum 47redmine-2ndAl mininum 47redmine-2nd
Al mininum 47redmine-2nd
 
Xilinx SDSoC(2016.3)解体新書ソフトウェア編
Xilinx SDSoC(2016.3)解体新書ソフトウェア編Xilinx SDSoC(2016.3)解体新書ソフトウェア編
Xilinx SDSoC(2016.3)解体新書ソフトウェア編
 

Mehr von Hidenori Goto

Excelで勤務時間合計2
Excelで勤務時間合計2Excelで勤務時間合計2
Excelで勤務時間合計2Hidenori Goto
 
Excelで勤務時間合計
Excelで勤務時間合計Excelで勤務時間合計
Excelで勤務時間合計Hidenori Goto
 
Symfony2 3rd-Party Bundles
Symfony2 3rd-Party BundlesSymfony2 3rd-Party Bundles
Symfony2 3rd-Party BundlesHidenori Goto
 
Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)Hidenori Goto
 
Symfony2 workshop-1 (nagoya 2011/2/10)
Symfony2 workshop-1 (nagoya 2011/2/10)Symfony2 workshop-1 (nagoya 2011/2/10)
Symfony2 workshop-1 (nagoya 2011/2/10)Hidenori Goto
 
Symfony2 introduction
Symfony2 introductionSymfony2 introduction
Symfony2 introductionHidenori Goto
 
Symfony 1.4 TIPS from Openpne Source Code
Symfony 1.4 TIPS from Openpne Source CodeSymfony 1.4 TIPS from Openpne Source Code
Symfony 1.4 TIPS from Openpne Source CodeHidenori Goto
 
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話symfonyで汎用設定値を読み書きするモデル等をプラグインにした話
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話Hidenori Goto
 
HTC Desireについて
HTC DesireについてHTC Desireについて
HTC DesireについてHidenori Goto
 
Abコマンドを使ったウェブアプリケーションのパフォーマンス計測
Abコマンドを使ったウェブアプリケーションのパフォーマンス計測Abコマンドを使ったウェブアプリケーションのパフォーマンス計測
Abコマンドを使ったウェブアプリケーションのパフォーマンス計測Hidenori Goto
 
TwitterのStreaming ApiをPhpから使う
TwitterのStreaming ApiをPhpから使うTwitterのStreaming ApiをPhpから使う
TwitterのStreaming ApiをPhpから使うHidenori Goto
 
TwitterのStreaming APIについて
TwitterのStreaming APIについてTwitterのStreaming APIについて
TwitterのStreaming APIについてHidenori Goto
 
SubversionとSugarsync
SubversionとSugarsyncSubversionとSugarsync
SubversionとSugarsyncHidenori Goto
 
Osc Nagoya 2009 symfonyの紹介
Osc Nagoya 2009 symfonyの紹介Osc Nagoya 2009 symfonyの紹介
Osc Nagoya 2009 symfonyの紹介Hidenori Goto
 

Mehr von Hidenori Goto (20)

Excelで勤務時間合計2
Excelで勤務時間合計2Excelで勤務時間合計2
Excelで勤務時間合計2
 
Excelで勤務時間合計
Excelで勤務時間合計Excelで勤務時間合計
Excelで勤務時間合計
 
Symfony2 3rd-Party Bundles
Symfony2 3rd-Party BundlesSymfony2 3rd-Party Bundles
Symfony2 3rd-Party Bundles
 
翻訳について
翻訳について翻訳について
翻訳について
 
Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)
 
Symfony2 workshop-1 (nagoya 2011/2/10)
Symfony2 workshop-1 (nagoya 2011/2/10)Symfony2 workshop-1 (nagoya 2011/2/10)
Symfony2 workshop-1 (nagoya 2011/2/10)
 
Symfony2 workshop-2
Symfony2 workshop-2Symfony2 workshop-2
Symfony2 workshop-2
 
Symfony2 workshop-1
Symfony2 workshop-1Symfony2 workshop-1
Symfony2 workshop-1
 
Symfony2 introduction
Symfony2 introductionSymfony2 introduction
Symfony2 introduction
 
Symfony 1.4 TIPS from Openpne Source Code
Symfony 1.4 TIPS from Openpne Source CodeSymfony 1.4 TIPS from Openpne Source Code
Symfony 1.4 TIPS from Openpne Source Code
 
Orm Designer
Orm DesignerOrm Designer
Orm Designer
 
Symfony tdd
Symfony tddSymfony tdd
Symfony tdd
 
Symfony2 caching
Symfony2 cachingSymfony2 caching
Symfony2 caching
 
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話symfonyで汎用設定値を読み書きするモデル等をプラグインにした話
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話
 
HTC Desireについて
HTC DesireについてHTC Desireについて
HTC Desireについて
 
Abコマンドを使ったウェブアプリケーションのパフォーマンス計測
Abコマンドを使ったウェブアプリケーションのパフォーマンス計測Abコマンドを使ったウェブアプリケーションのパフォーマンス計測
Abコマンドを使ったウェブアプリケーションのパフォーマンス計測
 
TwitterのStreaming ApiをPhpから使う
TwitterのStreaming ApiをPhpから使うTwitterのStreaming ApiをPhpから使う
TwitterのStreaming ApiをPhpから使う
 
TwitterのStreaming APIについて
TwitterのStreaming APIについてTwitterのStreaming APIについて
TwitterのStreaming APIについて
 
SubversionとSugarsync
SubversionとSugarsyncSubversionとSugarsync
SubversionとSugarsync
 
Osc Nagoya 2009 symfonyの紹介
Osc Nagoya 2009 symfonyの紹介Osc Nagoya 2009 symfonyの紹介
Osc Nagoya 2009 symfonyの紹介
 

Symfony2 Behat/BDD (#Symfony2study 4)

  • 1. 今日から始める BDD (Symfony2編) 日本Symfonyユーザー会 後藤 秀宣(@hidenorigoto) Symfony2 x BDD
  • 2. 内容(予定) ● TDD、BDDとは ● Behatの特徴 ● Behat環境の構築方法(Symfony2) ● Behatの使い方 ● 応用 Symfony2 x BDD
  • 3.   Webアプリケーションの テスト駆動開発 入門の話 Symfony2 x BDD
  • 4. 質問 テスト書いてますか? Symfony2 x BDD
  • 5.   ご安心ください Symfony2 x BDD
  • 6. テストを書いていない人 めんどくさい テストの書き方が分か らない 開発プロセスにまで適 用できない Symfony2 x BDD
  • 7. テストを書いていない人 後藤の勝手なイメージ めんどくさい テストの書き方が分か らない 開発プロセスにまで適 用できない Symfony2 x BDD
  • 8.   ご安心ください この講演を聞くと テストファーストな開発を 始められます! (多分) Symfony2 x BDD
  • 9.   ところで 「テスト」とは Symfony2 x BDD
  • 10.   テスト駆動開発のテスト ≠ ソフトウェア品質テストのテスト Symfony2 x BDD
  • 11.   テスト駆動開発のテスト 開発手法の視点 ≠ 品質保証の視点 ソフトウェア品質テストのテスト Symfony2 x BDD
  • 12.   ● TDDについて、もっと体系的に知りたい方は Symfony2 x BDD
  • 13. 原書はこちら Symfony2 x BDD
  • 15. Behatを使うと ● 自然言語に近い構文 →英語が分からなくても書ける Symfony2 x BDD
  • 16. Behatを使うと ● 自然言語に近い構文 →英語が分からなくても書ける ● 組み込みステップ →Webテスト系をスムーズに記述可能 Symfony2 x BDD
  • 17. Behatを使うと ● 自然言語に近い構文 →英語が分からなくても書ける ● 組み込みステップ →Webテスト系をスムーズに記述可能 ● テストの内容が分かりやすい →テストのメンテナンス性 Symfony2 x BDD
  • 18. Behatを使うと ● 自然言語に近い構文 →英語が分からなくても書ける ● 組み込みステップ →Webテスト系をスムーズに記述可能 ● テストの内容が分かりやすい →テストのメンテナンス性 ハードルが 低い Symfony2 x BDD
  • 19.   BDDについて Symfony2 x BDD
  • 21. BDDについて ● 振舞駆動開発 Symfony2 x BDD
  • 22. BDDについて ● 振舞駆動開発 ● PHPUnit等でもBDDはできる Symfony2 x BDD
  • 23. BDDについて ● 振舞駆動開発 ● PHPUnit等でもBDDはできる ● BehatのBDDは「シナリオBDD」  →違いは・・・・? Symfony2 x BDD
  • 24. PHPUnit vs Behat(Gherkin) PHPUnit PHPUnitマニュアル 第13章 振舞駆動開発 ボウリングゲームの例 Symfony2 x BDD
  • 25. PHPUnit vs Behat(Gherkin) Behat Symfony2 x BDD
  • 26. BDDについて ● 振舞駆動開発 ● PHPUnit等でもBDDはできる ● BehatのBDDは「シナリオBDD」  →違いは・・・・? Symfony2 x BDD
  • 27. BDDについて ● 振舞駆動開発 ● PHPUnit等でもBDDはできる ● BehatのBDDは「シナリオBDD」  →違いは・・・・? 読みやすいDSLによるテストの記述と実行 Symfony2 x BDD
  • 28. BDDについて ● 振舞駆動開発 ● PHPUnit等でもBDDはできる ● BehatのBDDは「シナリオBDD」  →違いは・・・・? 読みやすいDSLによるテストの記述と実行 ユビキタス言語(DDD)との親和性 Symfony2 x BDD
  • 29.   Behatについて Symfony2 x BDD
  • 30. Behatとは ● BDDフレームワーク for PHP Symfony2 x BDD
  • 32. Behatとは ● BDDフレームワーク for PHP ● Cucumber(Ruby)互換DSL (Gherkin) Symfony2 x BDD
  • 33. Behatとは ● BDDフレームワーク for PHP ● Cucumber(Ruby)互換DSL (Gherkin) ● Symfony2のコンポーネントを使って実装 Symfony2 x BDD
  • 34. Behatとは ● BDDフレームワーク for PHP ● Cucumber(Ruby)互換DSL (Gherkin) ● Symfony2のコンポーネントを使って実装 ● Symfony2と統合しやすい(BehatBundle) Symfony2 x BDD
  • 35. Behatとは ● BDDフレームワーク for PHP ● Cucumber(Ruby)互換DSL (Gherkin) ● Symfony2のコンポーネントを使って実装 ● Symfony2と統合しやすい(BehatBundle) ● Symfony2以外のフレームワークのテストにも利用可能  symfony 1.4(sfBrowser)  他(Goutte/Sahi ドライバ) Symfony2 x BDD
  • 36. BehatBundleを使うと (そこそこ)手軽に シナリオBDDを 始められます! Symfony2 x BDD
  • 37.   ここから Symfony2で Behatの使い方 Symfony2 x BDD
  • 38. インストール手順 ● Gistにまとめてあります https://gist.github.com/997514 ● めんどくさい方は、knpIpsumで持ってくる http://bit.ly/sf2-knpipsum Symfony2 x BDD
  • 39. Behat環境の準備(1) ● 最初にPHPUnit環境を準備 ● インストールされていなければ インストールされたディレクトリを確認しておくこと Symfony2 x BDD
  • 40. Behat環境の準備(2) ● Symfony2プロジェクトに以下を組み込む Behat https://github.com/Behat/Behat Gherkin https://github.com/Behat/Gherkin Mink https://github.com/Behat/Mink BehatBundle https://github.com/Behat/BehatBundle MinkBundle https://github.com/Behat/MinkBundle Symfony2 x BDD
  • 41. Behat環境の準備(2) ● Symfony2プロジェクトに以下を組み込む Behat https://github.com/Behat/Behat Gherkin https://github.com/Behat/Gherkin Mink https://github.com/Behat/Mink BehatBundle https://github.com/Behat/BehatBundle MinkBundle https://github.com/Behat/MinkBundle 慣れてない方には超ハードル Symfony2 x BDD
  • 42. Behat環境の準備(2)- 2 ● BETA2あたりからdepsファイルを使ったvendors 指定に変わった →組み込みたいライブラリのリポジトリを bin/depsファイルに書く →$ php bin/vendors.php Symfony2 x BDD
  • 43. Behat環境の準備(3) ● autoload.php  注:PHPUnitがインクルードパスにない    場合は追加しておく ● AppKernel.php  バンドルを登録  PHPUnit用require ● config_dev.yml  framework   test: ~  behat_mink   start_url: ~ Symfony2 x BDD
  • 44. Behat環境の準備(4) ● Symfony2コンソールの一覧にbehatが出る Symfony2 x BDD
  • 45. Behat環境の準備(5) ● 動作確認:テスト用のバンドルを初期化 AcmeTestBundleは あらかじめ作成 されていること Symfony2 x BDD
  • 46.   Behatで テストを書く 基礎知識 Symfony2 x BDD
  • 47. 用語 ● フィーチャ ● シナリオ ● ステップ ● 前提(Given) もし(When) ならば(Then) ● Gherkin ● Mink ● Sahi Symfony2 x BDD
  • 48. フィーチャ ● アプリケーションの機能ごとの単位 ● 粒度は自由に決める (モジュール単位、画面単位、チケット単位) ● Behatでは、1つのフィーチャファイル (拡張子 feature) ● Feature(フィーチャ): に続けて記述 Symfony2 x BDD
  • 49. シナリオ ● 特定のフィーチャの振舞を表現するシナリオ ● Scenario(シナリオ): に続けて記述 ● 1つのフィーチャには、複数のシナリオを記述 できる Symfony2 x BDD
  • 50. ステップ ● 1つのシナリオには、複数のステップを記述で きる ● Given(前提)、When(もし)、Then(なら ば)に続けて記述 ● Webテスト向けの組み込みステップがある Symfony2 x BDD
  • 51. Gherkin(ガーキン) ● Cucumber互換DSLの名前 Symfony2 x BDD
  • 52. Mink ● テストドライバー抽象化ライブラリ ● ドライバー抽象化レイヤーを設けることで、 (ほぼ)同じテストコードを使って、Symfony 内部でのテストとWebブラウザを使ったテスト の両方をサポート ● SymfonyDriver → 内部呼び出しでテスト GoutteDriver  → HTTP経由呼び出し SahiDriver   → FireFoxでテスト Symfony2 x BDD
  • 53. Sahi ● Seleniumみたいなヤツ ● http://sahi.co.in/w/sahi Symfony2 x BDD
  • 54.   フィーチャファイルの 書き方 Symfony2 x BDD
  • 56. フィーチャファイル フィーチャ Symfony2 x BDD
  • 57. フィーチャファイル シナリオ Symfony2 x BDD
  • 58. フィーチャファイル ステップ(前提) Symfony2 x BDD
  • 59. フィーチャファイル ステップ(条件) Symfony2 x BDD
  • 60. フィーチャファイル ステップ(期待する結果) Symfony2 x BDD
  • 61. フィーチャファイル 先頭にlanguageを指定すれば、日本語キーワードに対応 Symfony2 x BDD
  • 63. フィーチャファイル ● フィーチャファイルは、バンドルのFeatures ディレクトリ直下に作成する 「test.feature」など Symfony2 x BDD
  • 64.   テストを実行してみる Symfony2 x BDD
  • 65. Behatでのテスト実行 ● Behat:test:bundle バンドル名 Symfony2 x BDD
  • 66. Behatでのテスト実行 ● Behat:test:bundle バンドル名 シナリオ実行 Symfony2 x BDD
  • 67. Behatでのテスト実行 ● Behat:test:bundle バンドル名 実行結果 Symfony2 x BDD
  • 68. Behatでのテスト実行 ● Behat:test:bundle バンドル名 この辺注目 Symfony2 x BDD
  • 69.   ステップの実行の仕組み Symfony2 x BDD
  • 70. ステップの種類 ● 組み込みステップ 最初から使えるステップ フィーチャファイルに記述するだけで使える ● カスタムステップ 組み込みステップにない独自のルール フィーチャファイルに自由な文章で記述し、対応する コードをステップファイルに記述 Symfony2 x BDD
  • 71. 組み込みステップの一覧 behat:test:bundle --steps バンドル Symfony2 x BDD
  • 72. 組み込みステップの一覧 behat:test:bundle --steps --lang=ja バンドル Symfony2 x BDD
  • 73. 組み込みステップの一覧 重要 ステップの一覧(=レシピ)を見なが ら、ざっくりとしたシナリオを記述し ていける (Webアプリケーションの場合) Symfony2 x BDD
  • 74. 組み込みステップの一覧 重要 ステップの一覧(=レシピ)を見なが ら、ざっくりとしたシナリオを記述し ていける (Webアプリケーションの場合) テストコードを書く心理ハードルが低い Symfony2 x BDD
  • 75. 組み込みステップの場所 ● Mink内 src/Behat/Mink/Integration/step/ mink_steps.php 中をのぞいてみましょう Symfony2 x BDD
  • 77. 組み込みステップのコード ステップ(正規表現) Symfony2 x BDD
  • 78. 組み込みステップのコード ステップのPHPテストコード Symfony2 x BDD
  • 79. 組み込みステップのコード ● カスタムステップを実装する際にレシピがわり になります Symfony2 x BDD
  • 80. カスタムステップ ● カスタムステップは、 Features/steps/steps.php に記述する。 ● フィーチャファイルにカスタムステップを記述 してbehatコマンドを実行すると、未実装のカ スタムステップの雛形が表示される。 (先ほど見た画面) Symfony2 x BDD
  • 82. カスタムステップ steps.phpへコピペ Symfony2 x BDD
  • 83. カスタムステップ ● ステップがpendingになる ● あとはステップのコードを書くだけ Symfony2 x BDD
  • 84. カスタムステップ ● ステップメソッド内は結構何でもできる Symfony2 x BDD
  • 85. テストの書き方は 分かった。 早くテストファースト について教えてくれ Symfony2 x BDD
  • 86. 後は 開発のサイクルに乗せるだけ + 慣 れ ろ ! Symfony2 x BDD
  • 87. テストファーストに持っていく ● まずはテストを書くことに慣れる ● たとえばechoデバッグを、テストコードで行う Symfony2 x BDD
  • 88.   http://www.phpunit.de/manual/3.6/ja/writing-tests-for-phpunit.html Symfony2 x BDD
  • 89. テストファーストに持っていく ● まずはテストを書くことに慣れる ● たとえばechoデバッグを、テストコードで行う Symfony2 x BDD
  • 90. テストファーストに持っていく ● コード→テスト→コード→テスト・・・ Symfony2 x BDD
  • 91. テストファーストに持っていく ● コード→テスト→コード→テスト・・・ このループに慣れれば、 自然とテストを書きたくなります Symfony2 x BDD
  • 92.   おまけ Symfony2 x BDD
  • 93. Behat応用(1) ● DDD(MDD) ユビキタス言語(DDD参照)を使い、ドメイン モデルのフィーチャ、シナリオ、ステップを記 述 →ドメインエキスパートにもメンテナンスでき る(可能性) →前提・もし・ならば、の制限を外すように DSLを拡張する(「・」など) Symfony2 x BDD
  • 94. Behat応用(2) ● ITS(Redmine)、Gitのブランチ、コミット等 も含めたワークフロー →Behat関係あるの? →ブランチの実装内容に対するテストコード、 フィーチャ、シナリオが一体となってGitリポジ トリで管理可能 →特にバグ修正の際に、ITSのチケットにいろ いろ書くのではなく、バグ修正用フィーチャに 説明などを書くようにする Symfony2 x BDD
  • 95.   是非Behatを 使ってみてください! Symfony2 x BDD