Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RSpec #TechLunch
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Livesense Inc.
PRO
April 23, 2014
Technology
48
0
Share
RSpec #TechLunch
2012/04/04(水) @ Livesense TechLunch
発表者:塩足 拓也
Livesense Inc.
PRO
April 23, 2014
More Decks by Livesense Inc.
See All by Livesense Inc.
28新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
44
27新卒_総合職採用_会社説明資料
livesense
PRO
0
4.3k
27新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
8.7k
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
320
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
1
1.7k
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
590
26新卒_総合職採用_会社説明資料
livesense
PRO
0
13k
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
2
61k
26新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
1
13k
Other Decks in Technology
See All in Technology
AWS認定資格は本当に意味があるのか?
nrinetcom
PRO
2
280
[最強DB講義]推薦システム | 基礎編
recsyslab
PRO
1
180
20260423_執筆の工夫と裏側 技術書の企画から刊行まで / From the planning to the publication of technical book
nash_efp
3
410
Standards et agents IA : un tour d’horizon de MCP, A2A, ADK et plus encore
glaforge
0
170
No Types Needed, Just Callable Method Check
dak2
1
1.4k
インターネットの技術 / Internet technology
ks91
PRO
0
210
Route 53 Global Resolver で高額課金発生!
otanikohei2023
0
110
基盤を育てる 外部SaaS連携の運用
gamonges_dresscode
1
120
ServiceNow Knowledge 26 の歩き方
manarobot
0
120
Revisiting [CLS] and Patch Token Interaction in Vision Transformers
yu4u
0
380
AIを共同作業者にして書籍を執筆する方法 / How to Write a Book with AI as a Co-Creator
ama_ch
2
130
MLOps導入のための組織作りの第一歩
akasan
0
340
Featured
See All Featured
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
380
Designing for Performance
lara
611
70k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
120
Skip the Path - Find Your Career Trail
mkilby
1
110
GraphQLとの向き合い方2022年版
quramy
50
15k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Typedesign – Prime Four
hannesfritz
42
3k
Being A Developer After 40
akosma
91
590k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
43k
Unsuck your backbone
ammeep
672
58k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Transcript
RSpec Takuya Shiotari
TDDとは テストの対象となるコードを書く前にテストを書く開発手法 1. 失敗するテストコードを書く 2. テストがパスする最小限のコードを書く 3. リファクタリング 開発サイクル RED/GREEN/REFACTOR
▪ コードをクリーンな状態に保つことができる ▪ テストの実践ではない ▪ 高品質なコードをテスト担当者に引き渡すために使用する手法
BDDとは ▪ TDDの派生 ▪ 振る舞い(要求仕様)を自然言語で併記しなが らテストコードを記述 ▪ テスト≒要求仕様 ▪ BDDフレームワーク
◦ ストーリーフレームワーク(Cucumber) ◦ スペックフレームワーク(RSpec)
BDDの原則 ▪ 十分といったら十分 ◦ 必要最低限のことを行うべき ◦ それ以上の労力は無駄 ▪ ステークホルダーに価値をもたらす ◦
目に見える価値をもたらすためにあるべき ▪ すべては振る舞いから ◦ アプリケーションの振る舞いをステークホルダーの視点 に立って説明できるのと同様に、低レベルのコードの振 る舞いを、それを利用する他のコードという視点から説 明する
RSpec導入理由 ▪ プログラムの変更によってデグレードしてないか不安 ▪ コードのサイズが大きくなるとリファクタリングが難しい ▪ ドキュメントをBTSやツールで管理しても他のドキュメントや ソフトウェアと一致しなくなる ▪ 過度な設計をしたくない
⇒テストコードと要求仕様を併記するので常に一致 ⇒自動化したリグレッションテスト ⇒カバレッジが100%のテストがあれば安心してリファクタリング できる ⇒具象的なコードから始まり抽象化するため、適切な抽象化 で抑えられる
RSpec ▪ 2005年にSteven Bakerによって開発 ▪ 振舞を記述するためのDSLを提供するフレームワーク ▪ RSpecは全てがユニットテスト TDDの場合 RSpecの場合
アサーション (コードの検証) エクスペくテーション (期待すること) テスト サンプルコード テストケース サンプルグループ
RSpecのインストール $ gem install rspec ▪ 単独で利用する場合 ▪ railsで利用する場合 group
:develop, :test do gem 'rspec-rails' end RAILS_ROOT/Gemfile
サンプルスペックファイル describe Stack do before do @stack = Stack.new @stack.push
:item end describe "#peek" do it "should return the top element" do @stack.peek.should == :item end it "should not remove the top element" do @stack.peek @stack.size.should == 1 end end end stack_spec.rb フック サンプルコード サンプルコード サンプル グループ
スペックファイルの構成
RSpecの実行 フィルタ サンプルコード サンプルコード サンプル グループ $ rspec stack_spec.rb -c
.. Finished in 0.00063 seconds 2 examples, 0 failures ▪ 単独で利用する場合 ▪ railsで利用する場合 $ bundle exec rspec spec/views/home/index.html.erb_spec.rb .................... Finished in 10.79 seconds 20 examples, 0 failures
specdoc形式のフォーマット $ rspec stack_spec.rb -c -fd Stack #peek should return
the top element should not remove the top element Finished in 0.00072 seconds 2 examples, 0 failures
考察 ▪ 考え方になれるまで大変 ▪ Mockの使い方が鍵 ▪ RSpec単体では遅い ⇒ sporkを使って高速化 ▪
RSpec on Railsでは全てを単体テストにできる ので関心が自然に分離される ▪ eureeekaは英語で記述したが、日本語にしても よかったかも…
次回
RSpec gemの構成 ▪ rspec-core ◦ describeやitなどの実行可能なサンプルを記述できる構 造を提供 ▪ rspec-expectations ◦
サンプル内でオブジェクトの期待する結果を表現 ▪ rspec-mocks ◦ rspec-mocksはテストダブルフレームワーク ◦ テストダブル、メソッドスタブ、メッセージエクスペくテー ションをサポート
RSpec::Core ▪ describe ◦ サンプルグループを宣言 ▪ it ◦ サンプルを宣言 ▪
pending ◦ サンプルを保留扱いとして宣言 ▪ before、after ◦ サンプルの実行前後をフック
RSpec::Expectations ▪ should(matcher)とshould_not(matcher) ◦ matcher.matches?(self)がtrueの場合:次の行へ ◦ matcher.matches?(self)がfalseの場合:例外発生 ▪ RSpecに組み込まれているマッチャ ◦
equal、include、respond_to, raise_error ▪ 述語マッチャ ◦ be_empty、be_instance_of ▪ 演算子を使った式 ◦ result.should.==(3) → result.should == 3 ◦ result.should.(be.<(7)) → result.should be < 7
RSpec::Mocks ▪ テストダブル ◦ サンプルにおいて別のオブジェクトの代役を務めるオブジェクト ▪ メソッドスタブ ◦ サンプルコードの実行中にあらかじめ定義されたレスポンスを返すようにプ ログラムできるメソッド
▪ メッセージエクスペくテーション ◦ 一度も呼び出されないとエラーになるメソッドスタブ ▪ 役割に焦点を合わせる ▪ やり取りに焦点を合わせる ▪ インターフェースの発見 ▪ 依存関係を実装せずに作業をすすめる ▪ 依存関係からの分離 ▪ 不確定性からの分離