Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

[VDO] TDD :: ว่าด้วยเรื่องการจัดการ dependency

$
0
0

Screen Shot 2559-02-05 at 5.22.49 PM

Screen Shot 2559-02-05 at 5.22.49 PM จาก VDO เรื่อง Test Driven Development(TDD) for iOS (and anything) ของคุณ Jon Reid ได้พูดถึงเรื่องการจัดการ dependency เพื่อทำให้ code ของเรานั้นมันไม่ผูกติดกันมากไป (Loose coupling) และสามารถทดสอบได้ง่าย จึงทำการสรุปไว้นิดหน่อย

สิ่งที่ developer ทุกคนควรทำความเข้าใจกับ TDD ก่อนเสมอ

ซึ่งมี resources ที่ต้องอ่าน คือ มาถึงเนื้อหาที่น่าสนใจกันบ้าง

เริ่มจากอธิบายเกี่ยวกับ Unit test มี 3 ชนิด คือ

  1. Return value test
  2. State test
  3. Interaction test

1. Return value test คืออะไร

อธิบายด้วย AAA (Arrange-Act-Assert) ได้ดังนี้
  • Arrange = ทำการกำหนดค่าเริ่มต้นต่าง ๆ ของ object
  • Act = ทำการเรียก method/function ที่ทำการ return ผลลัพธ์กลับมา
  • Assert = ทำการตรวจสอบผลการทำงาน กับ สิ่งที่คาดหวังว่าตรงกันหรือไม่
แสดงการทดสอบดังรูป Screen Shot 2559-02-05 at 4.46.14 PM

2. State test

อธิบายด้วย AAA (Arrange-Act-Assert) ได้ดังนี้
  • Arrange = ทำการกำหนดค่าเริ่มต้นต่าง ๆ ของ object
  • Act = ทำการเรียก method/function โดยไม่สนใจว่าจะส่งค่าอะไรกลับมา
  • Assert = ทำการดึงข้อมูล หรือ สถานะจาก object ที่ทำการทดสอบ ว่าทำงานตามที่ต้องการหรือไม่
แสดงการทดสอบดังรูป Screen Shot 2559-02-05 at 4.48.50 PM

3. Interaction test

เป็นการทดสอบสำหรับการทำงานร่วมกันของ object ต่าง ๆ ซึ่งเป็นชนิดการทดสอบที่ถูกใช้งานอย่างมาก และแน่นอนว่าเป็นเรื่องหลักของ VDO นี้ แสดงการทำงานดังรูป Screen Shot 2559-02-05 at 4.52.36 PM จากรูปอาจดูไม่ค่อยเข้าใจเท่าไรนัก !! ดังนั้นจึงทำการอธิบายด้วยการทำงานของร้านอาหาร ซึ่งประกอบไปด้วย 3 ส่วน คือ
  1. ลูกค้า
  2. พนักงาน
  3. พ่อครัว
ซึ่งในการสั่งอาหารของลูกค้านั้น จะสั่งอาหารกับพนักงาน โดยไม่ต้องสนใจว่า พ่อครัวเป็นใคร นั่นคือ พนักงานต้องไม่ผูกติดกับพ่อครัวนะ (Isolated dependency) แสดงดังรูป Screen Shot 2559-02-05 at 4.55.45 PM แต่ในการทำงานพบว่า พนักงานต้องต้องทำงานร่วมกับพ่อครัวเสมอ (Interaction) เพื่อทำอาหารตาม order จากลูกค้า โดยในการทดสอบนั้น เราสามารถทำงานจำลองพ่อครัวขึ้นมา เพื่อทำงานตาม order ของลูกค้า แต่เพียงแค่การจำลองอย่างเดียว ไม่สามารถทำงานร่วมกันได้ เพราะว่าทั้งพนักงาน และ พ่อครัวนั้นแยกออกจากกัน ดังนั้น จึงต้องทำการ Injection Dependency หรือส่งพ่อครัวให้ไปทำงานร่วมกับพนักงาน แสดงดังรูป Screen Shot 2559-02-05 at 4.58.42 PM

วิธีการของ Dependency Injection มีหลายวิธี ดังนี้

  • Extract and Override method
  • Method injection
  • Property injection
  • Constructor injection
  • Ambient context
จากรูปจะเห็นว่า เราทำการจำลองพ่อครัวขึ้นมา คำถามที่เกิดขึ้นมาเลย คือ จำลองแบบไหน อย่างไร ? คำตอบคือ ใช้ Stub และ Mock ไงล่ะ !!

จากหนังสือ The Art of Unit Testing อธิบายเรื่องของ Stub และ Mock ไว้ดังรูป

ซึ่งผมคิดว่า มันเข้าใจได้ง่ายมาก ๆ ดังรูป Screen Shot 2559-02-05 at 5.05.51 PM   Screen Shot 2559-02-05 at 5.07.01 PM

ยังไม่จบนะ ใน VDO ยังมี code ตัวอย่าง

สำหรับการทดสอบการทำงานกับ Network อีกด้วย รวมทั้งการ refactor code เพื่อให้ทดสอบง่าย และ อ่านได้ง่ายอีกด้วย ลองทำการอ่าน ฟัง ดู กันครับ มันมีประโยชน์อย่างมากมาย สามารถดู slide เพิ่มเติมได้ที่ PDF:: Slide ดู VDO กันได้เลย https://www.youtube.com/watch?v=Jzlz3Bx-NzM

Viewing all articles
Browse latest Browse all 1997

Trending Articles