27
RSPEC 勉勉勉 @gaooh

Rspec勉強会

  • Upload
    gaooh

  • View
    232

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Rspec勉強会

RSPEC 勉強会 @gaooh

Page 2: Rspec勉強会

実践 RSPEC

文法はわかっているけど何をかくべきかピンときてないぶっちゃけ実はなんで書く必要があるかはわかってないTDD とかわかるけど、そんなうまくいかないよねとおもっている

Page 3: Rspec勉強会

AGENDA

BDD とはよい SPEC とは、ダメな SPEC とは上達するためのステップRspec あるある

Page 4: Rspec勉強会

WHAT, BDD

振る舞い駆動開発TDD から派生

重視するものが違うDan North (http://dannorth.net/) が提唱

Page 5: Rspec勉強会

WHY, BDD

アプリケーション開発における仕様は複雑であるテストの目的は設計だけではない

Page 6: Rspec勉強会

IMPORTANT

我々は Rspec を採用しているのではない、開発手法としてBDD を採用してて、その実装手段として Rspec を採用しているテスティングフレームワークを考える際に重要

Page 7: Rspec勉強会

なぜ BDD 推しなのか

TDD するのはいいけどテスト何書いていい変わらないんだけど

Page 8: Rspec勉強会
Page 9: Rspec勉強会

あ、うん、わかる。でも実際のサービスでどう書けばいいの?そんな単純じゃないよね?いやライブラリ作るんだったらわかるんだけどさ

Page 10: Rspec勉強会

しっくりこない感JUnit4 , StrutsTestCase 期 , そのそもテスタブルな設計じゃない ....Seleniume で E2E したほうが .....

Spring ( DI ) 期、いやまだつらい、セットアップ処理を書くのに一番時間がかかるよRails 期、やっと楽に書けるようになった!!!!

Page 11: Rspec勉強会

TDD 習得周りを見よう見まねで書いてみる書かないと Rails Update できない。メンテできない。「いやテストなんて面倒だよ」って人を 3 ヶ月、テストのないプロジェクトにアサイン→色々やらかす→テスト信者になる

Page 12: Rspec勉強会

TDD から BDD へWeb アプリケーションだと前提やコンテキストの説明が多いもう日本語で書きたい。 JUnit はかけたのに ( 当時は無理やりRuby でもできたけど )

私が書きたいのはテストだったのだろうか、いや振る舞いだった

Page 13: Rspec勉強会

BDD で重視するもの

ドキュメントとしてのテスト例示としての仕様

Page 14: Rspec勉強会

よい SPEC

振る舞いの記述がテスト対象の詳細仕様書変わりとなっている

Page 15: Rspec勉強会

よい SPEC

Page 16: Rspec勉強会

悪い SPEC

Page 17: Rspec勉強会

よい SPEC

使い方が SPEC から読み取れる

Page 18: Rspec勉強会

よい SPEC

Page 19: Rspec勉強会

悪い SPEC

Page 20: Rspec勉強会

その他よい SPEC

振る舞いがかわったらテストが落ちる or 落ちるテストを書いてから振る舞いを変える他のテスト対象の振る舞いに影響を及ぼさない

Page 21: Rspec勉強会

上達するための STEP必読

Better Spec ( http://betterspecs.org/jp/ )

Everyday Rails - Rspec による Rails テスト入門中級

The Rspec Book

( http://www.shoeisha.co.jp/book/detail/9784798121932)

上級 Dan North のブログとか .... ?

Page 22: Rspec勉強会

RSPEC あるあるdescribe と context の使い分けがわからないよ!これ内部実装は同じ。どうつかい分けるかは実装者に委ねられているdescribe: テスト対象を表現、 context : テスト状況を表現

「 xxx の時」って書きたくなったら context

Page 23: Rspec勉強会

RSPEC あるあるlet と let! の使い分けがわからないよ

let は定義しても呼び出されるまで実体化されないよ、 let! は定義した時に実体化されるよ。基本は let で let! でないと困る場面でのみ let! を使うといいよ

Page 24: Rspec勉強会

RSPEC あるある1箇所変更したら五月雨に色々テストが落ちたよ

テストリファクタリングしないといけないアラート出てるよテストが他のテストに影響を与えているのは良くない兆しだよ

Page 25: Rspec勉強会

RSPEC あるある繰り返しが多いので DRY に書きたいよ

ちょっと冷静になろうよテストのテストはないんだよ後から見て振る舞いとしてわかりやさがないと困るんだよ

Page 26: Rspec勉強会

RSPEC あるある

変換ボタン押すのが面倒だから英語で書きたいよコンテキストを説明するには母国語が一番だよ君が英語ネイティブなら考えるよ

Page 27: Rspec勉強会

RSPEC あるある

E2E が難しいようん、わかる。別途 Capybara 勉強会は必要だよね