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
unit tests in ruby
Search
SiweiShen
January 03, 2013
Technology
1
93
unit tests in ruby
introduced how to write basic unit tests and how to fasten the execution speed.
SiweiShen
January 03, 2013
Tweet
Share
More Decks by SiweiShen
See All by SiweiShen
Ruby introduction to QA people
sg552sg552
1
66
ruby introduction ( Chinese)
sg552sg552
1
67
meta programming ruby
sg552sg552
5
230
Other Decks in Technology
See All in Technology
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
300
まずはマネコンでちゃちゃっと作ってから、それをCDKにしてみよか。
yamada_r
2
120
【NoMapsTECH 2025】AI Edge Computing Workshop
akit37
0
220
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
450
品質視点から考える組織デザイン/Organizational Design from Quality
mii3king
0
210
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
190
いま注目のAIエージェントを作ってみよう
supermarimobros
0
330
2025年になってもまだMySQLが好き
yoku0825
8
4.8k
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
470
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
570
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
490
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
460
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
Producing Creativity
orderedlist
PRO
347
40k
Why Our Code Smells
bkeepers
PRO
339
57k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Gamification - CAS2011
davidbonilla
81
5.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Faster Mobile Websites
deanohume
309
31k
Statistics for Hackers
jakevdp
799
220k
Facilitating Awesome Meetings
lara
55
6.5k
Transcript
Mocks in unit test of Ruby 申思维 Siwei
什 要用 元 ? 为 么 单 测试 Why UT?
➲ 1. 把 手 操作 下来, 成自 。 动 记录 变 动 Manual Operations => Automatic ➲ 2. 可以多次运行,是持 集成 的基 。 续 测试 础 The Basic of Continous Integration ➲ 3. 运行方便,极大减 程序 担。 轻 员负 Save developer's life.
比 对 IRB: > a = 1 > b =
2 > puts a + b > 3 Unit test: def test_should_show_1_add_2 a = 1; b = 2; assert a+b == 3 end
中的 现实 问题 Problems we met 某个 目, 始了一年, 运行需要与
项 开 3 个外部系 配合: 统 An existing app interacting with 3 external systems: ➲ 1. web service system ➲ 2. authentication system ➲ 3. authorization system
中的 现实 问题 The situation of test cases. 元 的情况:
单 测试 ➲ 1. 400 test cases. 2. too slow. 20+ minutes. 3. not stable , 5% 的 WEB SERVICE test cases will fail.
后果 Results ➲ 人 越来越不想运行 元 。 开发 员 单
测试 Developers don't want to use Unit tests. ➲ 程中,容易走神。( 开发过 20 分 的 ) 钟 时间 Developers often lost their focus during the coding. ➲ 出 率太高。 错 Not stable 直接 致了,系 以 ,想想就 大。 导 统难 维护 头 用 成 人 ,体 十分不好。 户 为测试 员 验
解决方案 Solutions 目 : 短 元 运行的 。 标 缩
单 测试 时间 Target :shorten the running time. 手段: 使用 模 象 和方法。 拟对 ➲ 原来: 用一次,需要 调 15 秒。 Before : 15 s ➲ 模 象: 拟对 0.00xx 秒。 Now: 0.000x s 1. Mock : for objects. 2. Stub : for methods.
Mock Object Real object: ( cost 15 seconds) class DeviceResource
def query(parameters) return json.decode(service(parameters)) end end Mock object: ( 0.000x seconds) class DeviceResource def query(parameters) return “{ status: success, id: 3 }” end end
Stub a method def get_name return “Jim” end get_name #
=> “Jim” require 'rspec-mock' stub(:get_name).and_return (“Kate”) get_name # => “Kate”
Two Mode for Running the Test ➲ 1. the mock
mode: $ rpsec spec ➲ 2. also supports the real mode: $ rspec spec with_real_webservice=true
The result ➲ 目更好了 项 Project becomes better: 1. 代
量更高 码质 .higher code quality. 2. 速度更快 开发 faster development & delivery. 3. 更少。用 更 意 错误 户 满 . less bugs.
结论 Conclusion ➲ 是使用 元 。 总 单 测试 Always
use unit tests. ➲ 元 :可重 ,速度快, 定。( 让单 测试 复 稳 make unit tests faster, stable and reusable )
Thank you ! 谢谢 申思 维 Siwei Shen
[email protected]
http://shensiwei.com