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
Livesense Inc.
PRO
April 23, 2014
Technology
0
38
RSpec #TechLunch
2012/04/04(水) @ Livesense TechLunch
発表者:塩足 拓也
Livesense Inc.
PRO
April 23, 2014
Tweet
Share
More Decks by Livesense Inc.
See All by Livesense Inc.
27新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
100
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
15
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
0
1.4k
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
390
26新卒_総合職採用_会社説明資料
livesense
PRO
0
8.8k
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
1
27k
26新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
1
12k
中途セールス職_会社説明資料
livesense
PRO
0
250
EM候補者向け転職会議説明資料
livesense
PRO
0
120
Other Decks in Technology
See All in Technology
使いたいMCPサーバーはWeb APIをラップして自分で作る #QiitaBash
bengo4com
0
1.3k
Tech-Verse 2025 Global CTO Session
lycorptech_jp
PRO
0
1.2k
LangChain Interrupt & LangChain Ambassadors meetingレポート
os1ma
2
220
生成AI時代 文字コードを学ぶ意義を見出せるか?
hrsued
1
730
モバイル界のMCPを考える
naoto33
0
360
Liquid Glass革新とSwiftUI/UIKit進化
fumiyasac0921
0
300
Delegating the chores of authenticating users to Keycloak
ahus1
0
130
React開発にStorybookとCopilotを導入して、爆速でUIを編集・確認する方法
yu_kod
1
110
無意味な開発生産性の議論から抜け出すための予兆検知とお金とAI
i35_267
0
1.3k
Geminiとv0による高速プロトタイピング
shinya337
0
200
20250625 Snowflake Summit 2025活用事例 レポート / Nowcast Snowflake Summit 2025 Case Study Report
kkuv
1
370
ハッカソン by 生成AIハッカソンvol.05
1ftseabass
PRO
0
150
Featured
See All Featured
Designing Experiences People Love
moore
142
24k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Optimizing for Happiness
mojombo
379
70k
YesSQL, Process and Tooling at Scale
rocio
173
14k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Writing Fast Ruby
sferik
628
62k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
What's in a price? How to price your products and services
michaelherold
246
12k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
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 ▪ テストダブル ◦ サンプルにおいて別のオブジェクトの代役を務めるオブジェクト ▪ メソッドスタブ ◦ サンプルコードの実行中にあらかじめ定義されたレスポンスを返すようにプ ログラムできるメソッド
▪ メッセージエクスペくテーション ◦ 一度も呼び出されないとエラーになるメソッドスタブ ▪ 役割に焦点を合わせる ▪ やり取りに焦点を合わせる ▪ インターフェースの発見 ▪ 依存関係を実装せずに作業をすすめる ▪ 依存関係からの分離 ▪ 不確定性からの分離