Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RSpec #TechLunch
Search
Livesense Inc.
PRO
April 23, 2014
Technology
63
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RSpec #TechLunch
2012/04/04(水) @ Livesense TechLunch
発表者:塩足 拓也
Livesense Inc.
PRO
April 23, 2014
More Decks by Livesense Inc.
See All by Livesense Inc.
Rubyはただの⾔語に⾮ず
livesense
PRO
0
520
28新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
120
27新卒_総合職採用_会社説明資料
livesense
PRO
0
7.1k
27新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
12k
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
540
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
1
1.8k
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
680
26新卒_総合職採用_会社説明資料
livesense
PRO
0
13k
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
2
74k
Other Decks in Technology
See All in Technology
LTのテーマ どうきめてる?〜5つの型と私のやり方〜
yama3133
1
100
range over func 2年間の軌跡 Issue #56413 はGoのエコシステムをどう変えたか
ryujicre8ive
0
180
生成AIエージェントを用いた、 手動テスト手順書から自動テストへの 変換手法の検討
magicpod
0
150
omasushiというライブラリを作った
polidog
PRO
0
220
MCPをつなげて作る組織横断のAIエージェント基盤(の開発工程)
tsubakimoto_s
0
120
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
290
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
220
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
130
AI時代、データエンジニアが一番おもろい
genshun9
0
560
ASTを使って影響範囲を特定する
nealle
0
190
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
450
What the customer really needed
kawaguti
PRO
1
130
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
690
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Speed Design
sergeychernyshev
33
2.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
Fireside Chat
paigeccino
43
4k
GraphQLとの向き合い方2022年版
quramy
50
15k
[SF Ruby Conf 2025] Rails X
palkan
2
1.4k
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 ▪ テストダブル ◦ サンプルにおいて別のオブジェクトの代役を務めるオブジェクト ▪ メソッドスタブ ◦ サンプルコードの実行中にあらかじめ定義されたレスポンスを返すようにプ ログラムできるメソッド
▪ メッセージエクスペくテーション ◦ 一度も呼び出されないとエラーになるメソッドスタブ ▪ 役割に焦点を合わせる ▪ やり取りに焦点を合わせる ▪ インターフェースの発見 ▪ 依存関係を実装せずに作業をすすめる ▪ 依存関係からの分離 ▪ 不確定性からの分離