Mocks Aren't Stubs 閱讀心得 Lu Wei Jen http://blog.weijen.net http://twitter.com/weijenlu http://facebook.com/weijenlu
文章網址 http://martinfowler.com/articles/mocksArentStubs.html
都是因為跟 ihower 晚上不睡覺害的 發現自己對 Mock & Stub  的觀念不清楚
先看個程式 沒有 mock object 的測試 v.s. 有 mock object 的測試
focus on one element you want
可是世界沒有這麼單純
這時你有兩個選擇 <ul><li>實際製作有互動到的物件
製造假的物件,讓互動完成 </li></ul>
造假有兩種  Mocks v.s Stubs
Mock Mock object
Stub Real object  Stub method
Stubs is State Verification 結果對,就對
Mocks is Behavior Verification 不只要結果正確,你平常還得行的正,坐的端
class MailServer def initialize @messages = Array.new end def send(msg) @messages << msg end def number_sent @message.size...
A Simple Stub Test it &quot;如果庫存不足,要寄信通知&quot; do order = Order.new(&quot;海尼根&quot;, 51) mailer = MailServer.new order.set...
A Simple Mock Test it &quot; 如果庫存不足,要寄信通知 &quot; do order = Order.new(&quot; 海尼根 &quot;, 51) warehouse = mock(Warehouse) m...
Classical Testing v.s. Mockist Testing
Classical Test 盡量使用真實的物件
Classical Testing 如果太複雜,那就先造假
Mockist Testing 一切都是假的 包含物件與函式
Classical Test 結果對、就對
Mockist Testing 不只是結果,流程也要測試
Classical Testing Middle-out 你先決定你要完成的範圍, 然後實作這個範圍的所有物件 。
Mockist Testing Outside-in 你只針對一個類別 or element 其他都用假的
Classical Testing 利用 fixture fixtures 可以 reuse
Mockist Testing 不需要 fixture Mock object 不易 reuse
Classical Testing 一個 bug 會造成數個 element 的測試錯誤
Mockist Testing 只有產生 bug 的 element 會測試錯誤
結論 我下次會考慮寫測試的!
Upcoming SlideShare
Loading in …5
×

Mock Aren't Stub 讀後心得

1,998
-1

Published on

1 Comment
4 Likes
Statistics
Notes
  • 这篇文章,怎么看也还是有些不理解。不过看了你的这个Slide,总算获得一些新的理解。谢谢分享。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
1,998
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
36
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

Mock Aren't Stub 讀後心得

  1. 1. Mocks Aren't Stubs 閱讀心得 Lu Wei Jen http://blog.weijen.net http://twitter.com/weijenlu http://facebook.com/weijenlu
  2. 2. 文章網址 http://martinfowler.com/articles/mocksArentStubs.html
  3. 3. 都是因為跟 ihower 晚上不睡覺害的 發現自己對 Mock & Stub 的觀念不清楚
  4. 4. 先看個程式 沒有 mock object 的測試 v.s. 有 mock object 的測試
  5. 5. focus on one element you want
  6. 6. 可是世界沒有這麼單純
  7. 7. 這時你有兩個選擇 <ul><li>實際製作有互動到的物件
  8. 8. 製造假的物件,讓互動完成 </li></ul>
  9. 9. 造假有兩種 Mocks v.s Stubs
  10. 10. Mock Mock object
  11. 11. Stub Real object Stub method
  12. 12. Stubs is State Verification 結果對,就對
  13. 13. Mocks is Behavior Verification 不只要結果正確,你平常還得行的正,坐的端
  14. 14. class MailServer def initialize @messages = Array.new end def send(msg) @messages << msg end def number_sent @message.size() end end A Simple Stub
  15. 15. A Simple Stub Test it &quot;如果庫存不足,要寄信通知&quot; do order = Order.new(&quot;海尼根&quot;, 51) mailer = MailServer.new order.set_mailer(mailer) order.fill(warehouse) mailer.number_sent.should eql(1) end
  16. 16. A Simple Mock Test it &quot; 如果庫存不足,要寄信通知 &quot; do order = Order.new(&quot; 海尼根 &quot;, 51) warehouse = mock(Warehouse) mailer = mock(MailServer) order.set_mailer(mailer) mailer.have_receive(:send).ordered warehouse.have_receive(:has_inventory). with(any_args()).and_return(false).ordered order.fill(warehouse) # 沒有狀態的測試 end
  17. 17. Classical Testing v.s. Mockist Testing
  18. 18. Classical Test 盡量使用真實的物件
  19. 19. Classical Testing 如果太複雜,那就先造假
  20. 20. Mockist Testing 一切都是假的 包含物件與函式
  21. 21. Classical Test 結果對、就對
  22. 22. Mockist Testing 不只是結果,流程也要測試
  23. 23. Classical Testing Middle-out 你先決定你要完成的範圍, 然後實作這個範圍的所有物件 。
  24. 24. Mockist Testing Outside-in 你只針對一個類別 or element 其他都用假的
  25. 25. Classical Testing 利用 fixture fixtures 可以 reuse
  26. 26. Mockist Testing 不需要 fixture Mock object 不易 reuse
  27. 27. Classical Testing 一個 bug 會造成數個 element 的測試錯誤
  28. 28. Mockist Testing 只有產生 bug 的 element 會測試錯誤
  29. 29. 結論 我下次會考慮寫測試的!
  30. 30. Q & A
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×