Perlでbdd

10
Perl で BDD(Cucumber) ででで .pm#7 2016.04.22 @dokechin

Transcript of Perlでbdd

Page 1: Perlでbdd

Perl で BDD(Cucumber)

吉祥寺 .pm#7 2016.04.22 @dokechin

Page 2: Perlでbdd

BDD( Behavior Driven Development)これから作成しようとするプログラムに期待される「振る舞い」や「制約条件」、つまり「要求仕様」に近い形で、自然言語を併記しながらテストコードを記述する。 ( 出典: wikipedia)

Page 3: Perlでbdd

BDD ツール (Cucumber)feature という拡張子の txtファイル( gherkin 形式) f

① 仕様を記述設計者

実装者

ステップ定義(テストコード) f

② テストを記述

③ テストの実行「設計者の意図どおりに振る舞っているか?」をテストする

Page 4: Perlでbdd

Cucumber Perl Binding

Page 5: Perlでbdd

① 仕様( feature) の記述# language: jaフィーチャ : 飼育計画 牛を飼育するための計画。 シナリオ : 小さな牛を飼育する 前提 体重 450kg の牛 もし < 飼料の必要量を計算する ならば <  カロリー26500MJ  かつ <  タンパク215kg シナリオ : 大きな牛を飼育する 前提 体重500kgの牛 もし <   飼料の必要量を計算する ならば <  カロリー29500MJ かつ <  タンパク245kg

・ 1 つの feature ファイルには複数のシナリオとそれを構成するステップを記載する。・ステップは「前提」、「もし」、「ならば」、「かつ」の 4 種類がある

Page 6: Perlでbdd

② テストの記述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

③ フォルダ構成 ( 例)project_home`-- features `-- basic_outline.feature `-- step_definitions `-- basic_outline_steps.pl

Page 8: Perlでbdd

④ テストの実行 pherkin

Usage: pherkin pherkin some/path/features/ pherkin –p profile_name

Page 9: Perlでbdd

demohttps://github.com/dokechin/cucumber_example1. Selenium server の起動2. Mojolicious の起動 (morbo)3. テストの実行 (pherkin)

Page 10: Perlでbdd

参考URLCucumber https://cucumber.io/docsTest::BDD::Cucumber https://metacpan.org/pod/Test::BDD::Cucumber