perlでbdd
TRANSCRIPT
![Page 1: Perlでbdd](https://reader036.vdokumen.net/reader036/viewer/2022082619/587bdc501a28ab834d8b689f/html5/thumbnails/1.jpg)
Perl で BDD(Cucumber)
吉祥寺 .pm#7 2016.04.22 @dokechin
![Page 2: Perlでbdd](https://reader036.vdokumen.net/reader036/viewer/2022082619/587bdc501a28ab834d8b689f/html5/thumbnails/2.jpg)
BDD( Behavior Driven Development)これから作成しようとするプログラムに期待される「振る舞い」や「制約条件」、つまり「要求仕様」に近い形で、自然言語を併記しながらテストコードを記述する。 ( 出典: wikipedia)
![Page 3: Perlでbdd](https://reader036.vdokumen.net/reader036/viewer/2022082619/587bdc501a28ab834d8b689f/html5/thumbnails/3.jpg)
BDD ツール (Cucumber)feature という拡張子の txtファイル( gherkin 形式) f
① 仕様を記述設計者
実装者
ステップ定義(テストコード) f
② テストを記述
③ テストの実行「設計者の意図どおりに振る舞っているか?」をテストする
![Page 4: Perlでbdd](https://reader036.vdokumen.net/reader036/viewer/2022082619/587bdc501a28ab834d8b689f/html5/thumbnails/4.jpg)
Cucumber Perl Binding
![Page 5: Perlでbdd](https://reader036.vdokumen.net/reader036/viewer/2022082619/587bdc501a28ab834d8b689f/html5/thumbnails/5.jpg)
① 仕様( feature) の記述# language: jaフィーチャ : 飼育計画 牛を飼育するための計画。 シナリオ : 小さな牛を飼育する 前提 体重 450kg の牛 もし < 飼料の必要量を計算する ならば < カロリー26500MJ かつ < タンパク215kg シナリオ : 大きな牛を飼育する 前提 体重500kgの牛 もし < 飼料の必要量を計算する ならば < カロリー29500MJ かつ < タンパク245kg
・ 1 つの feature ファイルには複数のシナリオとそれを構成するステップを記載する。・ステップは「前提」、「もし」、「ならば」、「かつ」の 4 種類がある
![Page 6: Perlでbdd](https://reader036.vdokumen.net/reader036/viewer/2022082619/587bdc501a28ab834d8b689f/html5/thumbnails/6.jpg)
② テストの記述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でフィーチャーファイルのテキストを参照して利用
![Page 7: Perlでbdd](https://reader036.vdokumen.net/reader036/viewer/2022082619/587bdc501a28ab834d8b689f/html5/thumbnails/7.jpg)
③ フォルダ構成 ( 例)project_home`-- features `-- basic_outline.feature `-- step_definitions `-- basic_outline_steps.pl
![Page 8: Perlでbdd](https://reader036.vdokumen.net/reader036/viewer/2022082619/587bdc501a28ab834d8b689f/html5/thumbnails/8.jpg)
④ テストの実行 pherkin
Usage: pherkin pherkin some/path/features/ pherkin –p profile_name
![Page 9: Perlでbdd](https://reader036.vdokumen.net/reader036/viewer/2022082619/587bdc501a28ab834d8b689f/html5/thumbnails/9.jpg)
demohttps://github.com/dokechin/cucumber_example1. Selenium server の起動2. Mojolicious の起動 (morbo)3. テストの実行 (pherkin)
![Page 10: Perlでbdd](https://reader036.vdokumen.net/reader036/viewer/2022082619/587bdc501a28ab834d8b689f/html5/thumbnails/10.jpg)
参考URLCucumber https://cucumber.io/docsTest::BDD::Cucumber https://metacpan.org/pod/Test::BDD::Cucumber