Perlでbdd
Transcript of Perlでbdd
Perl で BDD(Cucumber)
吉祥寺 .pm#7 2016.04.22 @dokechin
BDD( Behavior Driven Development)これから作成しようとするプログラムに期待される「振る舞い」や「制約条件」、つまり「要求仕様」に近い形で、自然言語を併記しながらテストコードを記述する。 ( 出典: wikipedia)
BDD ツール (Cucumber)feature という拡張子の txtファイル( gherkin 形式) f
① 仕様を記述設計者
実装者
ステップ定義(テストコード) f
② テストを記述
③ テストの実行「設計者の意図どおりに振る舞っているか?」をテストする
Cucumber Perl Binding
① 仕様( feature) の記述# language: jaフィーチャ : 飼育計画 牛を飼育するための計画。 シナリオ : 小さな牛を飼育する 前提 体重 450kg の牛 もし < 飼料の必要量を計算する ならば < カロリー26500MJ かつ < タンパク215kg シナリオ : 大きな牛を飼育する 前提 体重500kgの牛 もし < 飼料の必要量を計算する ならば < カロリー29500MJ かつ < タンパク245kg
・ 1 つの feature ファイルには複数のシナリオとそれを構成するステップを記載する。・ステップは「前提」、「もし」、「ならば」、「かつ」の 4 種類がある
② テストの記述use Test::BDD::Cucumber::StepFile;use Test::Selenium::Remote::Driver;
When qr/飼料の必要量を計算する /, sub { S->{'sel'}->find_element("input[type=\"submit\"]", "css")->click_ok;};
Then qr/カロリー"(.+)"MJ/, sub { my $mj = sprintf("%sMJ" , C->matches->[0]); S->{'sel'}->body_text_like(qr/$mj/);};
Then qr/タンパク"(.+)"kg/, sub { my $kg = sprintf("%skg" , C->matches->[0]); S->{'sel'}->body_text_like(qr/$kg/);};
フィーチャーファイルのステップの記述順でステップファイルの関数が呼ばれる
メソッド内で、変数Cでフィーチャーファイルのテキストを参照して利用
③ フォルダ構成 ( 例)project_home`-- features `-- basic_outline.feature `-- step_definitions `-- basic_outline_steps.pl
④ テストの実行 pherkin
Usage: pherkin pherkin some/path/features/ pherkin –p profile_name
demohttps://github.com/dokechin/cucumber_example1. Selenium server の起動2. Mojolicious の起動 (morbo)3. テストの実行 (pherkin)
参考URLCucumber https://cucumber.io/docsTest::BDD::Cucumber https://metacpan.org/pod/Test::BDD::Cucumber