Upload
gaooh
View
232
Download
0
Embed Size (px)
Citation preview
RSPEC 勉強会 @gaooh
実践 RSPEC
文法はわかっているけど何をかくべきかピンときてないぶっちゃけ実はなんで書く必要があるかはわかってないTDD とかわかるけど、そんなうまくいかないよねとおもっている
AGENDA
BDD とはよい SPEC とは、ダメな SPEC とは上達するためのステップRspec あるある
WHY, BDD
アプリケーション開発における仕様は複雑であるテストの目的は設計だけではない
IMPORTANT
我々は Rspec を採用しているのではない、開発手法としてBDD を採用してて、その実装手段として Rspec を採用しているテスティングフレームワークを考える際に重要
なぜ BDD 推しなのか
TDD するのはいいけどテスト何書いていい変わらないんだけど
あ、うん、わかる。でも実際のサービスでどう書けばいいの?そんな単純じゃないよね?いやライブラリ作るんだったらわかるんだけどさ
しっくりこない感JUnit4 , StrutsTestCase 期 , そのそもテスタブルな設計じゃない ....Seleniume で E2E したほうが .....
Spring ( DI ) 期、いやまだつらい、セットアップ処理を書くのに一番時間がかかるよRails 期、やっと楽に書けるようになった!!!!
TDD 習得周りを見よう見まねで書いてみる書かないと Rails Update できない。メンテできない。「いやテストなんて面倒だよ」って人を 3 ヶ月、テストのないプロジェクトにアサイン→色々やらかす→テスト信者になる
TDD から BDD へWeb アプリケーションだと前提やコンテキストの説明が多いもう日本語で書きたい。 JUnit はかけたのに ( 当時は無理やりRuby でもできたけど )
私が書きたいのはテストだったのだろうか、いや振る舞いだった
BDD で重視するもの
ドキュメントとしてのテスト例示としての仕様
よい SPEC
振る舞いの記述がテスト対象の詳細仕様書変わりとなっている
よい SPEC
悪い SPEC
よい SPEC
使い方が SPEC から読み取れる
よい SPEC
悪い SPEC
その他よい SPEC
振る舞いがかわったらテストが落ちる or 落ちるテストを書いてから振る舞いを変える他のテスト対象の振る舞いに影響を及ぼさない
上達するための STEP必読
Better Spec ( http://betterspecs.org/jp/ )
Everyday Rails - Rspec による Rails テスト入門中級
The Rspec Book
( http://www.shoeisha.co.jp/book/detail/9784798121932)
上級 Dan North のブログとか .... ?
RSPEC あるあるdescribe と context の使い分けがわからないよ!これ内部実装は同じ。どうつかい分けるかは実装者に委ねられているdescribe: テスト対象を表現、 context : テスト状況を表現
「 xxx の時」って書きたくなったら context
RSPEC あるあるlet と let! の使い分けがわからないよ
let は定義しても呼び出されるまで実体化されないよ、 let! は定義した時に実体化されるよ。基本は let で let! でないと困る場面でのみ let! を使うといいよ
RSPEC あるある1箇所変更したら五月雨に色々テストが落ちたよ
テストリファクタリングしないといけないアラート出てるよテストが他のテストに影響を与えているのは良くない兆しだよ
RSPEC あるある繰り返しが多いので DRY に書きたいよ
ちょっと冷静になろうよテストのテストはないんだよ後から見て振る舞いとしてわかりやさがないと困るんだよ
RSPEC あるある
変換ボタン押すのが面倒だから英語で書きたいよコンテキストを説明するには母国語が一番だよ君が英語ネイティブなら考えるよ
RSPEC あるある
E2E が難しいようん、わかる。別途 Capybara 勉強会は必要だよね