Slide 1

Slide 1 text

Mocks in unit test of Ruby 申思维 Siwei

Slide 2

Slide 2 text

什 要用 元 ? 为 么 单 测试 Why UT? ➲ 1. 把 手 操作 下来, 成自 。 动 记录 变 动 Manual Operations => Automatic ➲ 2. 可以多次运行,是持 集成 的基 。 续 测试 础 The Basic of Continous Integration ➲ 3. 运行方便,极大减 程序 担。 轻 员负 Save developer's life.

Slide 3

Slide 3 text

比 对 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

Slide 4

Slide 4 text

中的 现实 问题 Problems we met 某个 目, 始了一年, 运行需要与 项 开 3 个外部系 配合: 统 An existing app interacting with 3 external systems: ➲ 1. web service system ➲ 2. authentication system ➲ 3. authorization system

Slide 5

Slide 5 text

中的 现实 问题 The situation of test cases. 元 的情况: 单 测试 ➲ 1. 400 test cases. 2. too slow. 20+ minutes. 3. not stable , 5% 的 WEB SERVICE test cases will fail.

Slide 6

Slide 6 text

后果 Results ➲ 人 越来越不想运行 元 。 开发 员 单 测试 Developers don't want to use Unit tests. ➲ 程中,容易走神。( 开发过 20 分 的 ) 钟 时间 Developers often lost their focus during the coding. ➲ 出 率太高。 错 Not stable 直接 致了,系 以 ,想想就 大。 导 统难 维护 头 用 成 人 ,体 十分不好。 户 为测试 员 验

Slide 7

Slide 7 text

解决方案 Solutions 目 : 短 元 运行的 。 标 缩 单 测试 时间 Target :shorten the running time. 手段: 使用 模 象 和方法。 拟对 ➲ 原来: 用一次,需要 调 15 秒。 Before : 15 s ➲ 模 象: 拟对 0.00xx 秒。 Now: 0.000x s 1. Mock : for objects. 2. Stub : for methods.

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Stub a method def get_name return “Jim” end get_name # => “Jim” require 'rspec-mock' stub(:get_name).and_return (“Kate”) get_name # => “Kate”

Slide 10

Slide 10 text

Two Mode for Running the Test ➲ 1. the mock mode: $ rpsec spec ➲ 2. also supports the real mode: $ rspec spec with_real_webservice=true

Slide 11

Slide 11 text

The result ➲ 目更好了 项 Project becomes better: 1. 代 量更高 码质 .higher code quality. 2. 速度更快 开发 faster development & delivery. 3. 更少。用 更 意 错误 户 满 . less bugs.

Slide 12

Slide 12 text

结论 Conclusion ➲ 是使用 元 。 总 单 测试 Always use unit tests. ➲ 元 :可重 ,速度快, 定。( 让单 测试 复 稳 make unit tests faster, stable and reusable )

Slide 13

Slide 13 text

Thank you ! 谢谢 申思 维 Siwei Shen [email protected] http://shensiwei.com